如何使用OpenFileDialog来select一个文件夹?
如何使用OpenFileDialog
来select文件夹?
我打算使用下面的项目: https : //github.com/scottwis/OpenFileOrFolderDialog
但是,我面临一个问题。 它使用GetOpenFileName
函数和OPENFILENAME
结构。 而OPENFILENAME
有名为templateID
的成员。 这是对话框模板的标识符。 而且该项目也包含res1.rc
文件和模板对话框init。 但我不知道如何将此文件附加到我的C#项目。
有没有更好的方法来使用OpenFileDialog
来select文件夹?
基本上你需要FolderBrowserDialog
类:
提示用户select一个文件夹。 这个类不能被inheritance。
例:
using(var fbd = new FolderBrowserDialog()) { DialogResult result = fbd.ShowDialog(); if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath)) { string[] files = Directory.GetFiles(fbd.SelectedPath); System.Windows.Forms.MessageBox.Show("Files found: " + files.Length.ToString(), "Message"); } }
如果你在WPF中工作,你必须添加对System.Windows.Forms
的引用。
你还必须添加using System.IO
的Directory
类
作为未来用户想避免使用FolderBrowserDialog
,Microsoft曾经发布过一个叫做WindowsAPICodePack的API,它有一个名为CommonOpenFileDialog
对话框,可以设置成IsFolderPicker
模式。
如果您有权访问Nuget软件包,它仍然可以在公共列表中作为WindowsAPICodePack
对于包含行:
using Microsoft.WindowsAPICodePack.Dialogs;
用法:
CommonOpenFileDialog dialog = new CommonOpenFileDialog(); dialog.InitialDirectory = "C:\\Users"; dialog.IsFolderPicker = true; if (dialog.ShowDialog() == CommonFileDialogResult.Ok) { MessageBox.Show("You selected: " + dialog.FileName); }
听起来像你刚刚在FolderBrowserDialog之后 。
奇怪的是,这么多的优惠,但没有人添加下面的代码作为答案:
using (var folderDialog = new FolderBrowserDialog()) { if (folderDialog.ShowDialog() == DialogResult.OK) { // folderDialog.SelectedPath -- your result } }