2010-04-20 10 views
8

Devo spogliare un percorso di file e ottenere la cartella genitore.Uso un'espressione regolare su questo percorso file?

Dire il mio percorso è

\\ServerA\FolderA\FolderB\File.jpg 

ho bisogno di ottenere

  1. File Name = File.jog

  2. cartella risiede nella = FolderB

  3. e genitore folder = FolderA

Devo sempre salire di 2 livelli da dove risiede il file.

C'è un modo più semplice o un'espressione regolare la strada da percorrere?

+0

vorrei rispondere lo stesso Adam Robinson, ma Jon Skeet di sarà anche fare il trucco. Ho fatto +1 su entrambi e dovrebbero funzionare bene per te. – McAden

risposta

21

FileInfo è tuo amico:

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

Questo è esattamente il motivo per cui non rispondo alle domande di C# quando penso che Jon Skeet sia in giro, non c'è modo di batterlo. :-D –

2

Controllare la classe Directory (scelta migliore di DirectoryInfo in questo caso). Fa tutto il necessario. Non dovresti usare una regex o qualsiasi altra tecnica di analisi.

+0

DirectoryInfo è ottimo per ottenere la cartella e la cartella genitore, ma voleva anche ottenere il nome del file. – TLiebe

+0

Path ha un metodo statico per estrarre correttamente il nome del file. –

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

+1 Ero nel mezzo della stesura di questo. –

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

+1: soluzione molto più pulita della mia – house9

0

Se si sa per certo che si tratta sempre di un file e due directory, provare a utilizzare spezzati:

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

Ci sono funzioni di utilità molto meno fragili. Non analizzare (o costruire) le stringhe del percorso da solo. Anche questo è orribilmente illeggibile. –

0

Avete alcune opzioni per fare ciò che effettivamente usano oggetti .net reali invece di espressioni regolari.

È possibile utilizzare il 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) 
Problemi correlati