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