如何从文件的完整路径获取目录?


526

获取文件所在目录的最简单方法是什么?我正在使用它来设置工作目录。

string filename = @"C:\MyDirectory\MyFile.bat";

在这个例子中,我应该得到“ C:\ MyDirectory”。


3
那不是字符串文字吗?@"C:\MyDirectory\MyFile.bat"
埃德加2014年

3
有人想保护谁有权这样做的问题吗?11个类似的答案,最后一个来自2017
。.–布尔恩

Answers:


837

如果您绝对有绝对路径,请使用Path.GetDirectoryName(path)

如果您可能只会得到一个相对名称,请使用new FileInfo(path).Directory.FullName

请注意,PathFileInfo都可以在命名空间中找到System.IO


1
确实,但是有一种叫做GetDirectory的方法吗?不是GetDirectoryName吗?
布兰登

1
您可以只使用DirectoryName而不是Directory.FullPath可以吗?
史蒂文·罗宾斯

1
我正在证明自己没有相对的名字。我没有发现路径是绝对的。我现在有两个版本:)
Jon Skeet

您是否使用snippy进行检查?;)
shahkalpesh

1
@UlyssesAlves:我相信new FileInfo(path).Directory.FullName无论哪种情况都可以。
乔恩·斯基特



12

您可以使用System.IO.Path.GetDirectory(filename),或将路径变成FileInfo,然后使用FileInfo.Directory

如果您正在使用该路径进行其他操作,则FileInfo可能会有好处。


1
路径类中没有'GetDirectory方法;您必须使用'GetDirectoryName
BillW

12

使用下面提到的代码获取文件夹路径

Path.GetDirectoryName(filename);

这将返回 在您的情况下, “ C:\ MyDirectory”



5

如果使用的是FileInfo对象,则有一种简单的方法可以string通过DirectoryName属性来提取目录的完整路径的表示形式。

FileInfo.DirectoryName通过MSDN 对财产的描述:

获取表示目录的完整路径的字符串。

用法示例:

string filename = @"C:\MyDirectory\MyFile.bat";
FileInfo fileInfo = new FileInfo(filename);
string directoryFullPath = fileInfo.DirectoryName; // contains "C:\MyDirectory"

链接到MSDN文档


5

您可以使用以下方法获取当前的应用程序路径:

string AssemblyPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString();

祝好运!


0

首先,您必须使用System.IO命名空间。然后;

string filename = @"C:\MyDirectory\MyFile.bat";
string newPath = Path.GetFullPath(fileName);

要么

string newPath = Path.GetFullPath(openFileDialog1.FileName));

0

您可以Path.GetFullPath在大多数情况下使用。但是,如果您还想在文件名相对定位的情况下获取路径,则可以使用以下通用方法:

string GetPath(string filePath)
{
  return Path.GetDirectoryName(Path.GetFullPath(filePath))
}

例如:

GetPath("C:\Temp\Filename.txt") 返回 "C:\Temp\"

GetPath("Filename.txt")current working directory像返回"C:\Temp\"


0

就我而言,我需要找到(目录的)完整路径的目录名称,因此我只需执行以下操作:

var dirName = path.Split('\\').Last();

1
OP "C:\MyDirectory"并不需要MyDirectory。使用字符串操作方法的建议存在风险,存在很多陷阱,而不是使用专用Path方法。
Sinatr

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.