从C#中的完整文件路径解析目录名称

leo*_*ora 35 c# file

如果我有一个字符串变量,它具有:

"C:\temp\temp2\foo\bar.txt"
Run Code Online (Sandbox Code Playgroud)

而且我想得到

"富"

做这个的最好方式是什么?

Jon*_*eet 73

使用:

new FileInfo(@"C:\temp\temp2\foo\bar.txt").Directory.Name
Run Code Online (Sandbox Code Playgroud)

  • 如果有人需要完整的目录路径,请使用`new FileInfo(@"C:\ temp\temp2\foo\bar.txt").而不是DirectoryName`. (10认同)
  • 根据http://msdn.microsoft.com/en-us/library/system.io.fileinfo.fileinfo.aspx,如果调用者没有所需的权限,则FileInfo构造函数可以抛出.有没有替代方案只会在没有任何IO的情况下解析字符串? (3认同)
  • 字符串操作:var dir = _installPath.Split(new [] {Path.DirectorySeparatorChar},StringSplitOptions.RemoveEmptyEntries).Last(); (3认同)

Han*_*man 8

我不同意Skeet,但我一直都在使用

Path.GetFileNameWithoutExtension(@"C:\temp\temp2\foo\bar.txt")
Run Code Online (Sandbox Code Playgroud)

我怀疑FileInfo实际上是触及文件系统来获取它的信息,因为我期望GetFileNameWithoutExtension只是字符串操作 - 所以一个在另一个上的性能可能会更好.

  • 我今天学到了两件事......阅读问题并且永远不同意Skeet. (9认同)
  • 这里的结果略有不同...我认为当问题询问如何获取文件包含目录的“foo”时,您的方法会返回“bar”... (2认同)
  • Path.getDirectoryName没有完全符合他的要求吗? (2认同)
  • 您可以执行 `Path.GetFileName(Path.GetDirectoryName(filepath))` - 在测试中似乎可以完成这项工作,并且不会触及文件系统。 (2认同)

Ana*_*nth 7

我认为最简单的解决方案是

DirectoryInfo dinfo = new DirectoryInfo(path);

string folderName= dinfo.Parent.Name;