2010-04-20 15 views
8

Ich muss einen Dateipfad entfernen und den übergeordneten Ordner abrufen.Benütze ich einen regulären Ausdruck für diesen Dateipfad?

Sag meinen Weg

\\ServerA\FolderA\FolderB\File.jpg 

I

  1. Dateiname = File.jog

  2. Ordner es in = FolderB

  3. Und Eltern wohnt bekommen müssen, ist folder = FolderA

Ich muss immer 2 Ebenen von wo die Datei befindet.

Gibt es einen einfacheren Weg oder ist ein regulärer Ausdruck der Weg zu gehen?

+0

ich das gleiche wie Adam Robinson antworten würde, aber Jon Skeet wird auch den Trick tun. Ich habe beide und beide sollten für dich arbeiten. – McAden

Antwort

21

FileInfo ist dein Freund:

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

Das ist genau der Grund, warum ich keine C# -Fragen beantworte, wenn ich denke, Jon Skeet ist in der Nähe, es gibt keinen Weg, ihn zu schlagen. :-D –

2

Überprüfen Sie die Directory-Klasse (in diesem Fall eine bessere Wahl als DirectoryInfo). Es tut alles, was Sie brauchen. Sie sollten keine Regex oder eine andere Analysetechnik verwenden.

+0

DirectoryInfo ist großartig, um den Ordner und den übergeordneten Ordner zu erhalten, aber er wollte auch den Dateinamen erhalten. – TLiebe

+0

Path verfügt über eine statische Methode, um den Dateinamen korrekt abzurufen. –

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

+1 Ich war gerade dabei, dies zu schreiben. –

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

+1 - viel sauberere Lösung als meine – house9

0

Wenn Sie sicher wissen, dass Sie immer mit einer Datei und zwei Verzeichnisse zu tun haben, versuchen Split mit:

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

Es gibt Dienstprogrammfunktionen, die weit weniger spröde sind. Parsen Sie (oder konstruieren Sie) Pfadzeichenfolgen nicht selbst. Dies ist auch schrecklich unlesbar. –

0

Sie haben ein paar Optionen, um dies tatsächlich zu tun, die tatsächliche .net-Objekte anstelle von Regex verwenden.

können Sie verwenden die 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) 
Verwandte Themen