- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我使用OpenFileDialog
打开文件时,当然我需要获取文件目录 及其名称 来加载文件。(加载 xml,访问我需要完整路径的文件。)
opd
是 OpenFileDialog
if (opd.ShowDialog() == true)
{
var names = opd.FileNames;
foreach (string name in names)
{
LoadFile(Path.Combine(Path.GetDirectoryName(name), name));
}
}
我的问题是 Path.GetDirectoryName
如何通过仅获取字符串来获取文件的路径?
Path.GetDirectoryName(name)
name
只是 string
并且此方法仅通过获取字符串来获取其目录? .计算机中可以有数千个同名文件。
简短问题:opd
refrenced 在哪里?
编辑:
我以为 opd.FileNames
只是获取文件的 name。(因为方法名称)
而且我还发现了一些有趣的东西。
LoadFile(Path.Combine(Path.GetDirectoryName(name), name));
这很好用,因为 Path.Combine
将跳过字符串的相同部分。
例如:
string name = @"C:\Users\Default\xml.xml";
string getDirNameResault= Path.GetDirectoryName(name);// this will be C:\Users\Default
所以 Path.Combine 将是
Path.Combine(@"C:\Users\Default", @"C:\Users\Default\xml.xml)
女巫返回 "C:\Users\Default\xml.xml"
!
最佳答案
Path.GetDirectoryName
通过斜杠 /
或 \
拆分您已有的字符串(来自 opd
)和然后返回除最后一部分以外的所有内容。
.NET Core 基础库(称为 CoreFX)中函数的完整源代码,您可以在此处找到:https://github.com/dotnet/corefx/blob/41e203011152581a6c65bb81ac44ec037140c1bb/src/System.Runtime.Extensions/src/System/IO/Path.cs#L151
实现代码:
// Returns the directory path of a file path. This method effectively
// removes the last element of the given file path, i.e. it returns a
// string consisting of all characters up to but not including the last
// backslash ("\") in the file path. The returned value is null if the file
// path is null or if the file path denotes a root (such as "\", "C:", or
// "\\server\share").
//
public static String GetDirectoryName(String path)
{
if (path != null)
{
CheckInvalidPathChars(path);
#if FEATURE_LEGACYNETCF
if (!CompatibilitySwitches.IsAppEarlierThanWindowsPhone8)
{
#endif
string normalizedPath = NormalizePath(path, false);
// If there are no permissions for PathDiscovery to this path, we should NOT expand the short paths
// as this would leak information about paths to which the user would not have access to.
if (path.Length > 0)
{
try
{
// If we were passed in a path with \\?\ we need to remove it as FileIOPermission does not like it.
string tempPath = Path.RemoveLongPathPrefix(path);
// FileIOPermission cannot handle paths that contain ? or *
// So we only pass to FileIOPermission the text up to them.
int pos = 0;
while (pos < tempPath.Length && (tempPath[pos] != '?' && tempPath[pos] != '*'))
pos++;
// GetFullPath will Demand that we have the PathDiscovery FileIOPermission and thus throw
// SecurityException if we don't.
// While we don't use the result of this call we are using it as a consistent way of
// doing the security checks.
if (pos > 0)
Path.GetFullPath(tempPath.Substring(0, pos));
}
catch (SecurityException)
{
// If the user did not have permissions to the path, make sure that we don't leak expanded short paths
// Only re-normalize if the original path had a ~ in it.
if (path.IndexOf("~", StringComparison.Ordinal) != -1)
{
normalizedPath = NormalizePath(path, /*fullCheck*/ false, /*expandShortPaths*/ false);
}
}
catch (PathTooLongException) { }
catch (NotSupportedException) { } // Security can throw this on "c:\foo:"
catch (IOException) { }
catch (ArgumentException) { } // The normalizePath with fullCheck will throw this for file: and http:
}
path = normalizedPath;
#if FEATURE_LEGACYNETCF
}
#endif
int root = GetRootLength(path);
int i = path.Length;
if (i > root)
{
i = path.Length;
if (i == root) return null;
while (i > root && path[--i] != DirectorySeparatorChar && path[i] != AltDirectorySeparatorChar) ;
String dir = path.Substring(0, i);
#if FEATURE_LEGACYNETCF
if (CompatibilitySwitches.IsAppEarlierThanWindowsPhone8)
{
if (dir.Length >= MAX_PATH - 1)
throw new PathTooLongException(Environment.GetResourceString("IO.PathTooLong"));
}
#endif
return dir;
}
}
return null;
}
有关函数的完整源代码(在 Mono 中),请参见此处:https://github.com/mono/mono/blob/master/mcs/class/corlib/System.IO/Path.cs#L199
关于c# - Path.GetDirectoryName 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30777674/
当我使用OpenFileDialog 打开文件时,当然我需要获取文件目录 及其名称 来加载文件。(加载 xml,访问我需要完整路径的文件。) opd 是 OpenFileDialog
我正在尝试执行一个工具exe,它与主exe位于同一目录中。为此,我尝试首先使用 Assembly.GetExecutingAssembly 获取进程的 exe 名称,然后使用 IO.Path.GetD
我正在尝试执行与主 exe 位于同一目录中的工具 exe。为此,我尝试首先使用 Assembly.GetExecutingAssembly 获取进程的 exe 名称,然后使用 IO.Path.GetD
我在 .Net Core 2 中有一个测试用例,我在其中向 Path.GetDirectoryName 提供以下输入。 @"C:" + Path.DirectorySeparatorChar 当我在测
Path.GetDirectoryName(@"C:\\"); 返回 null 和 Path.GetDirectoryName(@"C:\\Foo"); 返回 C:\ 虽然这正是 documentat
public static void Main() { // testing file name var fileName = "\\\\server7\\EmailA
我发现在下面的代码中使用 Path.GetFileName() 可以按照我的意图工作,并为我提供正确文件夹的名称,但是如果我使用 Path.GetDirectoryName() 它返回父 (UserG
string path = Path.GetDirectoryName( Assembly.GetAssembly(typeof(MyClass)).Code
我想使用斜杠而不是反斜杠,因为我的应用程序与 ftp 通信,不允许将反斜杠作为目录分隔符。 有没有自己写方法的捷径/配置? 最佳答案 窃取@Tejs 评论作为答案。 由于 GetDirectoryNa
我正在尝试构建我的 .Net Core 解决方案,但收到了我无法弄清楚的错误消息; 2017-05-22T14:30:56.2490242Z _TransformWebConfig: 2017-05-
我是一名优秀的程序员,十分优秀!