从OpenFileDialog路径/文件名中提取路径


81

我正在编写一个从选择文件开始的小实用程序,然后需要选择一个文件夹。我想将文件夹默认设置为所选文件所在的位置。

OpenFileDialog.FileName返回完整的路径和文件名-我想要的只是获取路径部分(没有文件名),因此我可以将其用作初始选择的文件夹

    private System.Windows.Forms.OpenFileDialog ofd;
    private System.Windows.Forms.FolderBrowserDialog fbd;
    ...
    if (ofd.ShowDialog() == DialogResult.OK)
    {
        string sourceFile = ofd.FileName;
        string sourceFolder = ???;
    }
    ...
    fbd.SelectedPath = sourceFolder; // set initial fbd.ShowDialog() folder
    if (fbd.ShowDialog() == DialogResult.OK)
    {
       ...
    }

是否有任何.NET方法可以做到这一点,或者我需要使用regex, split, trim,etc吗?

Answers:


114

使用中的PathSystem.IO。它包含一些有用的调用,用于处理文件路径,包括所需的操作GetDirectoryName,返回文件路径的目录部分。

用法很简单。

string directoryPath = Path.GetDirectoryName(filePath);

4
谢谢-这必须是一个简单的答案。自我注意:不建议在午夜之后编码。不仅阅读方法原型也有帮助,因为VS文档将此列为公共静态字符串GetDirectoryName(string path),而我误解了该参数。
Kevin Haines


17
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{
    strfilename = openFileDialog1.InitialDirectory + openFileDialog1.FileName;
}

2
用户选择文件时,初始目录是否会更改?如果没有,那么当用户更改目录时,此方法将导致问题。另外,我认为他不希望将此FileName作为他的一部分sourceFolder
布莱恩J

7

您可以使用FolderBrowserDialog而不是FileDialog并从OK结果中获取路径。

FolderBrowserDialog browser = new FolderBrowserDialog();
string tempPath ="";

if (browser.ShowDialog() == DialogResult.OK)
{
  tempPath  = browser.SelectedPath; // prints path
}

1
因此,首先选择文件,然后再次导航至该文件并选择文件夹?
Shinzou

0

这是简单的方法!

string fullPath =openFileDialog1.FileName;
string directory;
directory = fullPath.Substring(0, fullPath.LastIndexOf('\\'));
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.