Как получить путь к файлу из OpenFileDialog и FolderBrowserDialog?
Привет, я начал изучать С# несколько дней назад, и я пытаюсь создать программу, которая копирует и вставляет файлы (и при необходимости заменяет) в выбранный каталог, но я не знаю, как получить каталог и файл пути из openfiledialog и folderbrowserdialog
что я делаю неправильно?
Здесь код:
namespace filereplacer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void direc_Click(object sender, EventArgs e)
{
string folderPath = "";
FolderBrowserDialog directchoosedlg = new FolderBrowserDialog();
if (directchoosedlg.ShowDialog() == DialogResult.OK)
{
folderPath = directchoosedlg.SelectedPath;
}
}
private void choof_Click(object sender, EventArgs e)
{
OpenFileDialog choofdlog = new OpenFileDialog();
choofdlog.Filter = "All Files (*.*)|*.*";
choofdlog.FilterIndex = 1;
choofdlog.Multiselect = true;
choofdlog.ShowDialog();
}
private void replacebtn_Click(object sender, EventArgs e)
{
// This is where i'm having trouble
}
public static void ReplaceFile(string FileToMoveAndDelete, string FileToReplace, string BackupOfFileToReplace)
{
File.Replace(FileToMoveAndDelete, FileToReplace, BackupOfFileToReplace, false);
}
}
Ответы
Ответ 1
Для OpenFileDialog:
OpenFileDialog choofdlog = new OpenFileDialog();
choofdlog.Filter = "All Files (*.*)|*.*";
choofdlog.FilterIndex = 1;
choofdlog.Multiselect = true;
if (choofdlog.ShowDialog() == DialogResult.OK)
{
string sFileName = choofdlog.FileName;
string[] arrAllFiles = choofdlog.FileNames; //used when Multiselect = true
}
Для FolderBrowserDialog:
FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.Description = "Custom Description";
if (fbd.ShowDialog() == DialogResult.OK)
{
string sSelectedPath = fbd.SelectedPath;
}
Для доступа к selected folder
и selected file name
вы можете объявить обе строки на уровне .
namespace filereplacer
{
public partial class Form1 : Form
{
string sSelectedFile;
string sSelectedFolder;
public Form1()
{
InitializeComponent();
}
private void direc_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
//fbd.Description = "Custom Description"; //not mandatory
if (fbd.ShowDialog() == DialogResult.OK)
sSelectedFolder = fbd.SelectedPath;
else
sSelectedFolder = string.Empty;
}
private void choof_Click(object sender, EventArgs e)
{
OpenFileDialog choofdlog = new OpenFileDialog();
choofdlog.Filter = "All Files (*.*)|*.*";
choofdlog.FilterIndex = 1;
choofdlog.Multiselect = true;
if (choofdlog.ShowDialog() == DialogResult.OK)
sSelectedFile = choofdlog.FileName;
else
sSelectedFile = string.Empty;
}
private void replacebtn_Click(object sender, EventArgs e)
{
if(sSelectedFolder != string.Empty && sSelectedFile != string.Empty)
{
//use selected folder path and file path
}
}
....
}
Примечание
Как вы сохранили choofdlog.Multiselect=true;
, это означает, что в OpenFileDialog()
вы можете выбрать несколько файлов (нажав клавишу ctrl
и щелкнув левой кнопкой мыши для выбора).
В этом случае вы можете получить все выбранные файлы в string[]
:
На уровне класса:
string[] arrAllFiles;
Найдите эту строку (если Multiselect=true
эта строка дает только первый файл):
sSelectedFile = choofdlog.FileName;
Чтобы использовать все файлы, выполните следующие действия:
arrAllFiles = choofdlog.FileNames; //this line gives array of all selected files
Ответ 2
Используйте класс Path
из System.IO
. Он содержит полезные вызовы для управления путями файлов, в том числе GetDirectoryName
, который делает то, что вы хотите, возвращая часть каталога пути к файлу.
Использование прост.
string directoryPath = System.IO.Path.GetDirectoryName(choofdlog.FileName);
Ответ 3
вы можете сохранить путь в строковой переменной, например
string s = choofdlog.FileName;
Ответ 4
Чтобы получить полный путь к файлу выбранного файла или файла, вам необходимо использовать свойство FileName для одного файла или FileNames свойство для нескольких файлов.
var file = choofdlog.FileName; // for one file
или для нескольких файлов
var files = choofdlog.FileNames; // for multiple files.
Чтобы получить каталог файла, вы можете использовать Path.GetDirectoryName
Вот Jon Keet ответ на аналогичный вопрос о получении каталогов с пути
Ответ 5
В вашем choofdlog
есть FileName
и FileNames
(для множественного выбора), содержащие пути к файлу, после возврата ShowDialog()
.
Ответ 6
Создайте этот класс как расширение:
public static class Extensiones
{
public static string FolderName(this OpenFileDialog ofd)
{
string resp = "";
resp = ofd.FileName.Substring(0, 3);
var final = ofd.FileName.Substring(3);
var info = final.Split('\\');
for (int i = 0; i < info.Length - 1; i++)
{
resp += info[i] + "\\";
}
return resp;
}
}
Затем вы можете использовать это следующим образом:
//ofdSource is an OpenFileDialog
if (ofdSource.ShowDialog(this) == DialogResult.OK)
{
MessageBox.Show(ofdSource.FolderName());
}
Ответ 7
Выполняется примитивное быстрое исправление.
Если вы используете только OpenFileDialog
, вы можете захватить FileName
, SafeFileName
, а затем вычесть, чтобы получить путь к папке:
exampleFileName = ofd.SafeFileName;
exampleFileNameFull = ofd.FileName;
exampleFileNameFolder = ofd.FileNameFull.Replace(ofd.FileName, "");