Extrayendo la ruta de la ruta / nombre de archivo de OpenFileDialog

81

Estoy escribiendo una pequeña utilidad que comienza con la selección de un archivo y luego necesito seleccionar una carpeta. Me gustaría establecer de forma predeterminada la carpeta donde estaba el archivo seleccionado.

OpenFileDialog.FileNamedevuelve la ruta completa y el nombre de archivo ; lo que quiero es obtener solo la parte de la ruta (sin nombre de archivo) , para poder usarla como la carpeta seleccionada inicial .

    private System.Windows.Forms.OpenFileDialog ofd;
    private System.Windows.Forms.FolderBrowserDialog fbd;
    ...
    if (ofd.ShowDialog() == DialogResult.OK)
    {
        string sourceFile = ofd.FileName;
        string sourceFolder = ???;
    }
    ...
    fbd.SelectedPath = sourceFolder; // set initial fbd.ShowDialog() folder
    if (fbd.ShowDialog() == DialogResult.OK)
    {
       ...
    }

¿Hay algún método .NET para hacer esto, o necesito usar, regex, split, trim,etc.?

Kevin Haines
fuente

Respuestas:

114

Utilice la Pathclase de System.IO. Contiene llamadas útiles para manipular rutas de archivo, incluido GetDirectoryNamecuál hace lo que desea, devolviendo la parte del directorio de la ruta del archivo.

El uso es simple.

string directoryPath = Path.GetDirectoryName(filePath);
Jeff Yates
fuente
4
Gracias, tenía que ser una respuesta sencilla. Nota personal: no se recomienda codificar después de la medianoche. Leer más que solo el prototipo del método también ayuda, ya que la documentación de VS lo enumera como una cadena estática pública GetDirectoryName (ruta de la cadena) y malinterpreté el parámetro.
Kevin Haines
28

Qué tal esto:

string fullPath = ofd.FileName;
string fileName = ofd.SafeFileName;
string path = fullPath.Replace(fileName, "");
Jan Macháček
fuente
17
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{
    strfilename = openFileDialog1.InitialDirectory + openFileDialog1.FileName;
}
Max
fuente
2
¿El directorio inicial cambia cuando el usuario selecciona un archivo? De lo contrario, este enfoque causaría un problema cuando el usuario cambia de directorio. Además, no creo que él quisiera el FileNamecomo parte de él sourceFolder.
Brian J
7

Puede usar FolderBrowserDialog en lugar de FileDialog y obtener la ruta del resultado OK.

FolderBrowserDialog browser = new FolderBrowserDialog();
string tempPath ="";

if (browser.ShowDialog() == DialogResult.OK)
{
  tempPath  = browser.SelectedPath; // prints path
}
Shaahin
fuente
1
Entonces, elija el archivo primero y luego navegue hacia él nuevamente y elija la carpeta.
shinzou
0

¡Esta es la forma sencilla de hacerlo!

string fullPath =openFileDialog1.FileName;
string directory;
directory = fullPath.Substring(0, fullPath.LastIndexOf('\\'));
Abdel
fuente