Витягнення шляху із шляху / імені файлу 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 перелічує це як загальнодоступний статичний рядок GetDirectoryName (шлях до рядка), і я неправильно інтерпретував параметр.
Кевін Хейнс

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.
Brian 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('\\'));
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.