2010-04-20 17 views
8

Tengo que quitar una ruta de archivo y obtener la carpeta principal.¿Utilizo una expresión regular en esta ruta de archivo?

decir que mi camino es

\\ServerA\FolderA\FolderB\File.jpg 

Necesito conseguir

  1. Nombre de archivo = File.jog carpeta

  2. reside en FolderB =

  3. y el padre carpeta = CarpetaA

Siempre tengo que subir 2 niveles desde donde reside el archivo.

¿Hay una manera más fácil o es una expresión regular el camino a seguir?

+0

me respondería lo mismo que Adam Robinson, pero Jon Skeet también hará el truco. I + 1 en ambos y cualquiera debería funcionar para ti. – McAden

Respuesta

21

FileInfo es su amigo:

using System; 
using System.IO; 

class Test 
{ 
    static void Main(string[] args) 
    { 
     string file = @"\\ServerA\FolderA\FolderB\File.jpg"; 
     FileInfo fi = new FileInfo(file); 
     Console.WriteLine(fi.Name);     // Prints File.jpg 
     Console.WriteLine(fi.Directory.Name);  // Prints FolderB 
     Console.WriteLine(fi.Directory.Parent.Name); // Prints FolderA 
    } 
} 
+1

Esta es exactamente la razón por la que no contesto preguntas C# cuando creo que Jon Skeet está cerca, no hay forma de vencerlo. :-D –

2

Consulte la clase de directorio (mejor opción que DirectoryInfo en este caso). Hace todo lo que necesitas. No debe usar una expresión regular o cualquier otra técnica de análisis sintáctico.

+0

DirectoryInfo es ideal para obtener la carpeta y la carpeta principal, pero también quería obtener el nombre del archivo. – TLiebe

+0

La ruta tiene un método estático para sacar el nombre del archivo correctamente. –

6
string fileName = System.IO.Path.GetFileName(path); 
string parent = System.IO.Path.GetDirectoryName(path); 
string parentParent = System.IO.Directory.GetParent(parent); 
+0

+1 Estaba en el medio de escribir esto. –

2
var fi = new FileInfo(@"\\ServerA\FolderA\FolderB\File.jpg"); 
fi.Name 
fi.Directory.Name 
fi.Directory.Parent.Name 
+0

+1 - solución mucho más limpia que la mía – house9

0

Si usted sabe con seguridad que siempre se trata de un archivo y dos directorios, trate de usar dividida:

string s = @"\\ServerA\FolderA\FolderB\File.jpg"; 
string[] parts = s.Split('\'); // might need '\\' 
string file = parts[parts.Length]; 
string parentDir = parts[parts.Length - 1]; 
string grandParentDir = parts[parts.Length - 2]; 
+0

Existen funciones de utilidad que son mucho menos quebradizas. No analice (ni construya) las cadenas de ruta usted mismo. Esto también es horriblemente ilegible. –

0

Tienes algunas opciones para hacer esto que usan objetos .net reales en lugar de expresiones regulares.

Puede utilizar el FileInfo:

FileInfo fileInfo = new FileInfo(@"\\ServerA\FolderA\FolderB\File.jpg"); 
fileInfo.Name //will give you the file name; 
DirectoryInfo directory = fileInfo.Directory; //will give you the parent folder of the file (FolderB); 
directory.Parent; //will give you this directories parent folder (FolderA) 
Cuestiones relacionadas