¿Cómo usar OpenFileDialog para seleccionar una carpeta?

¿Cómo usar OpenFileDialog para seleccionar carpetas?

Iba a utilizar el siguiente proyecto: https://github.com/scottwis/OpenFileOrFolderDialog

Sin embargo, me enfrenté a un problema. Utiliza la función OPENFILENAME y la estructura OPENFILENAME . Y OPENFILENAME tiene el miembro llamado templateID . Es el identificador para la plantilla de diálogo. Y el proyecto contiene el archivo res1.rc y el cuadro de diálogo init también. Pero no pude encontrar la manera de adjuntar este archivo a mi proyecto de C #.

¿Hay una mejor manera de usar un OpenFileDialog para seleccionar carpetas?

Básicamente, necesitas la clase FolderBrowserDialog :

Solicita al usuario que seleccione una carpeta. Esta clase no puede heredarse.

Ejemplo:

 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"); } } 

Si trabaja en WPF , debe agregar la referencia a System.Windows.Forms .

también tiene que agregar using System.IO para la clase Directory

Como nota para los futuros usuarios que deseen evitar el uso de FolderBrowserDialog , Microsoft solía lanzar una API llamada WindowsAPICodePack que tenía un diálogo útil llamado CommonOpenFileDialog , que podía establecerse en un modo IsFolderPicker .

Si tiene acceso a paquetes Nuget, todavía está disponible en las listas públicas como WindowsAPICodePack

Para la línea de inclusión:

 using Microsoft.WindowsAPICodePack.Dialogs; 

Uso:

 CommonOpenFileDialog dialog = new CommonOpenFileDialog(); dialog.InitialDirectory = "C:\\Users"; dialog.IsFolderPicker = true; if (dialog.ShowDialog() == CommonFileDialogResult.Ok) { MessageBox.Show("You selected: " + dialog.FileName); } 

Extraño que tantas respuestas / votos, pero nadie agrega el siguiente código como respuesta:

 using (var folderDialog = new FolderBrowserDialog()) { if (folderDialog.ShowDialog() == DialogResult.OK) { // folderDialog.SelectedPath -- your result } } 

Me parece que estás justo después del FolderBrowserDialog .

Existe una solución de seguridad que utiliza OpenFileDialog donde ValidateNames y CheckFileExists se establecen en false y FileName recibe un valor falso para indicar que se ha seleccionado un directorio.

Digo hack porque es confuso para los usuarios sobre cómo seleccionar una carpeta. Deben estar en la carpeta deseada y luego presionar Abrir mientras el nombre del archivo dice “Selección de carpeta”.

C # diálogo de selección de carpeta

Esto se basa en Seleccionar archivo o carpeta del mismo diálogo de Denis Stankovski.

 OpenFileDialog folderBrowser = new OpenFileDialog(); // Set validate names and check file exists to false otherwise windows will // not let you select "Folder Selection." folderBrowser.ValidateNames = false; folderBrowser.CheckFileExists = false; folderBrowser.CheckPathExists = true; // Always default to Folder Selection. folderBrowser.FileName = "Folder Selection."; if (folderBrowser.ShowDialog() == DialogResult.OK) { string folderPath = Path.GetDirectoryName(folderBrowser.FileName); // ... } 

Aquí hay otra solución, que tiene toda la fuente disponible en un único archivo ZIP simple.

Presenta OpenFileDialog con indicadores de Windows adicionales que lo hacen funcionar como el cuadro de diálogo Selección de carpetas de Windows 7+.

Según el sitio web, es de dominio público: “No hay una licencia como la que usted es libre de tomar y hacer con el código, lo que quiera”.

Enlaces de Archive.org: