Как получить путь к файлу из OpenFileDialog и FolderBrowserDialog?
Эй, я начал изучать C# несколько дней назад, и я пытаюсь сделать программу, которая копирует и вставляет файлы (и заменяет, если это необходимо) в выбранный каталог, но я не знаю, как получить каталог и пути к файлам из 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);
}
}
8 ответов
на диалоговое окно 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 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
использовать Path класс System.IO. Он содержит полезные вызовы для управления путями файлов, включая GetDirectoryName который делает то, что вы хотите, возвращая часть каталог путь к файлу.
использование просто.
string directoryPath = System.IO.Path.GetDirectoryName(choofdlog.FileName);
чтобы получить полный путь к выбранному файлу или файлам, вам нужно использовать имя файла свойства для одного файла или имена свойства для нескольких файлов.
var file = choofdlog.FileName; // for one file
или для нескольких файлов
var files = choofdlog.FileNames; // for multiple files.
чтобы получить каталог файла, вы можете использовать путь.GetDirectoryName
Вот Джон Кит ответ к аналогичному вопросу о получении каталогов из path
код choofdlog держит FileName и FileNames (для множественного выбора), содержащий пути к файлам, после ShowDialog() возвращает.
создайте этот класс как расширение:
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());
}
примитивное быстрое исправление, которое работает.
если вы используете OpenFileDialog, можно записать FileName, SafeFileName, затем вычесть, чтобы получить путь к папке:
exampleFileName = ofd.SafeFileName;
exampleFileNameFull = ofd.FileName;
exampleFileNameFolder = ofd.FileNameFull.Replace(ofd.FileName, "");
извините, если я опоздал ответить здесь, но я просто подумал, что должен бросить гораздо более простое решение для OpenDialog.
OpenDialog ofd = new OpenDialog();
var fullPathIncludingFileName = ofd.Filename; //returns the full path including the filename
var fullPathExcludingFileName = ofd.Filename.Replace(ofd.SafeFileName, "");//will remove the filename from the full path
Я еще не использовал FolderBrowserDialog раньше, поэтому я буду доверять моим коллегам-кодерам. Надеюсь, это поможет.