Я пишу небольшую утилиту, которая начинается с выбора файла, а затем мне нужно выбрать папку. Я хочу, чтобы папка по умолчанию соответствовала выбранному файлу.
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, и т. д.?





if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{
strfilename = openFileDialog1.InitialDirectory + openFileDialog1.FileName;
}
Меняется ли исходный каталог, когда пользователь выбирает файл? В противном случае этот подход вызовет проблему, когда пользователь сменит каталог. Кроме того, я не думаю, что он хотел, чтобы FileName был частью его sourceFolder.
Вы можете использовать FolderBrowserDialog вместо FileDialog и получить путь из результата OK.
FolderBrowserDialog browser = new FolderBrowserDialog();
string tempPath = "";
if (browser.ShowDialog() == DialogResult.OK)
{
tempPath = browser.SelectedPath; // prints path
}
Так что сначала выберите файл, а затем перейдите к нему снова и выберите папку ??
как насчет этого:
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('\\'));
Спасибо, это должен был быть простой ответ. Примечание для себя: кодирование после полуночи не рекомендуется. Также помогает чтение не только прототипа метода, поскольку в документации VS это указано как общедоступная статическая строка GetDirectoryName (путь к строке), и я неверно истолковал параметр.