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

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

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

17
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{
    strfilename = openFileDialog1.InitialDirectory + openFileDialog1.FileName;
}

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
}

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('\\'));
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.