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