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,か?

回答:


114

Pathからのクラスを使用しSystem.IOます。これには、ファイルパスを操作するための便利な呼び出しが含まれGetDirectoryNameています。これには、ファイルパスのディレクトリ部分を返すなど、必要な処理が含まれます。

使い方は簡単です。

string directoryPath = Path.GetDirectoryName(filePath);

4
ありがとう-それは簡単な答えでなければなりませんでした。自己メモ:深夜以降のコーディングはお勧めしません。VSのドキュメントにはこれがpublicstatic string GetDirectoryName(string path)としてリストされており、パラメーターを誤って解釈したため、メソッドのプロトタイプだけでなく、それ以上のものを読むことも役立ちます。
ケビンヘインズ

29

これはどう:

string fullPath = ofd.FileName;
string fileName = ofd.SafeFileName;
string path = fullPath.Replace(fileName, "");

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

2
ユーザーがファイルを選択すると、初期ディレクトリは変更されますか?そうでない場合、このアプローチは、ユーザーがディレクトリを変更するときに問題を引き起こします。また、FileName彼が彼の一部として望んでいたとは思わないsourceFolder
ブライアンJ

7

FileDialogの代わりにFolderBrowserDialogを使用して、OKの結果からパスを取得できます。

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

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

1
したがって、最初にファイルを選択してから、もう一度ファイルに移動してフォルダを選択しますか?
慎三

0

これが簡単な方法です!

string fullPath =openFileDialog1.FileName;
string directory;
directory = fullPath.Substring(0, fullPath.LastIndexOf('\\'));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.