open only net example ejemplo c# openfiledialog folderbrowserdialog

c# - only - openfiledialog select path



¿Cómo obtener la ruta del archivo desde OpenFileDialog y FolderBrowserDialog? (8)

Hola, comencé a aprender C # hace unos días y estoy tratando de hacer un programa que copia y pega archivos (y los reemplaza si es necesario) en un directorio seleccionado, pero no sé cómo obtener el directorio y las rutas de archivos del openfiledialog y folderbrowserdialog

¿Qué estoy haciendo mal?

Aquí está el código:

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


Crea esta clase como Extensión:

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

Entonces, podrías usar de esta manera:

//ofdSource is an OpenFileDialog if (ofdSource.ShowDialog(this) == DialogResult.OK) { MessageBox.Show(ofdSource.FolderName()); }


Lo siento si llego tarde para responder aquí, pero simplemente pensé que debería ofrecer una solución mucho más sencilla para 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

Todavía no he usado un FolderBrowserDialog antes, así que confiaré en la opinión de mis compañeros programadores sobre esto. Espero que esto ayude.


Para obtener la ruta de archivo completa de un archivo o archivos seleccionados, entonces debe usar la propiedad FileName para un archivo o la propiedad FileNames para varios archivos.

var file = choofdlog.FileName; // for one file

o para múltiples archivos

var files = choofdlog.FileNames; // for multiple files.

Para obtener el directorio del archivo, puede usar Path.GetDirectoryName
Aquí está la answer Jon Keet a una pregunta similar sobre cómo obtener directorios de la ruta


Su choofdlog contiene un nombre de FileName y choofdlog FileNames (para selección múltiple) que contienen las rutas de archivo, después de que se ShowDialog() .


Una solución rápida primitiva que funciona.

Si solo usa OpenFileDialog , puede capturar FileName , SafeFileName y luego restar para obtener la ruta de la carpeta:

exampleFileName = ofd.SafeFileName; exampleFileNameFull = ofd.FileName; exampleFileNameFolder = ofd.FileNameFull.Replace(ofd.FileName, "");


Utilice la clase Path de System.IO . Contiene llamadas útiles para manipular rutas de archivos, incluido GetDirectoryName que hace lo que usted quiere, devolviendo la parte del directorio de la ruta de archivos.

El uso es simple.

string directoryPath = System.IO.Path.GetDirectoryName(choofdlog.FileName);


puede almacenar la ruta en una variable de cadena como

string s = choofdlog.FileName;


Para 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 }

Para FolderBrowserDialog :

FolderBrowserDialog fbd = new FolderBrowserDialog(); fbd.Description = "Custom Description"; if (fbd.ShowDialog() == DialogResult.OK) { string sSelectedPath = fbd.SelectedPath; }

Para acceder a la selected folder y al selected file name , puede declarar ambas cadenas a nivel de clase .

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 } } .... }

NOTA :

Como has mantenido choofdlog.Multiselect=true; , eso significa que en OpenFileDialog() puede seleccionar varios archivos (presionando la tecla ctrl y haciendo clic con el botón izquierdo del ratón para seleccionar).

En ese caso, podría obtener todos los archivos seleccionados en la string[] :

A nivel de clase:

string[] arrAllFiles;

Localice esta línea (cuando Multiselect=true esta línea solo proporciona el primer archivo):

sSelectedFile = choofdlog.FileName;

Para obtener todos los archivos usa esto:

arrAllFiles = choofdlog.FileNames; //this line gives array of all selected files