如何从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); } }
对于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[]
获取所有选定的文件:
在class级:
string[] arrAllFiles;
找到这一行(当Multiselect=true
此行仅给出第一个文件):
sSelectedFile = choofdlog.FileName;
要获取所有文件,请使用:
arrAllFiles = choofdlog.FileNames; //this line gives array of all selected files
你可以将Path存储到字符串变量中
string s = choofdlog.FileName;
使用System.IO
的Path
类。 它包含用于操作文件路径的有用调用,包括GetDirectoryName
,它可以执行您想要的操作,返回文件路径的目录部分。
用法很简单。
string directoryPath = System.IO.Path.GetDirectoryName(choofdlog.FileName);
要获取所选文件的完整文件路径,则需要对一个文件使用FileName属性,对多个文件使用FileNames属性。
var file = choofdlog.FileName; // for one file
或多个文件
var files = choofdlog.FileNames; // for multiple files.
要获取文件的目录,可以使用Path.GetDirectoryName
这是Jon Keet关于从路径获取目录的类似问题的答案
在ShowDialog()
返回后,您的choofdlog
包含一个包含文件路径的FileName
和FileNames
(用于多选)。
将此类创建为Extension:
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所以我会相信我的同伴们对此有所了解。 我希望这有帮助。