如何使用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.IODirectory

作为未来用户想避免使用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 } }