Извлечение пути из пути / имени файла OpenFileDialog

Я пишу небольшую утилиту, которая начинается с выбора файла, а затем мне нужно выбрать папку. Я хочу, чтобы папка по умолчанию соответствовала выбранному файлу.

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, и т. д.?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
82
0
262 602
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Используйте класс Path из System.IO. Он содержит полезные вызовы для управления путями к файлам, включая GetDirectoryName, который делает то, что вы хотите, возвращая часть пути к файлу, относящуюся к каталогу.

Использование простое.

string directoryPath = Path.GetDirectoryName(filePath);

Спасибо, это должен был быть простой ответ. Примечание для себя: кодирование после полуночи не рекомендуется. Также помогает чтение не только прототипа метода, поскольку в документации VS это указано как общедоступная статическая строка GetDirectoryName (путь к строке), и я неверно истолковал параметр.

Kevin Haines 14.01.2009 00:27
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{
    strfilename = openFileDialog1.InitialDirectory + openFileDialog1.FileName;
}

Меняется ли исходный каталог, когда пользователь выбирает файл? В противном случае этот подход вызовет проблему, когда пользователь сменит каталог. Кроме того, я не думаю, что он хотел, чтобы FileName был частью его sourceFolder.

Brian J 19.06.2013 21:22

Вы можете использовать FolderBrowserDialog вместо FileDialog и получить путь из результата OK.

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

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

Так что сначала выберите файл, а затем перейдите к нему снова и выберите папку ??

shinzou 12.08.2016 21:06

как насчет этого:

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

Вот простой способ сделать это!

string fullPath =openFileDialog1.FileName;
string directory;
directory = fullPath.Substring(0, fullPath.LastIndexOf('\\'));

Другие вопросы по теме