Wie erhalte ich das Verzeichnis aus dem vollständigen Pfad einer Datei?

526

Was ist der einfachste Weg, um das Verzeichnis zu erhalten, in dem sich eine Datei befindet? Ich benutze dies, um ein Arbeitsverzeichnis festzulegen.

string filename = @"C:\MyDirectory\MyFile.bat";

In diesem Beispiel sollte "C: \ MyDirectory" angezeigt werden.

Sogar Mien
quelle
3
Sollte das nicht ein String-Literal sein? @"C:\MyDirectory\MyFile.bat"
Edgar
3
Möchte jemand diese Frage schützen, der das Recht dazu hat? 11 ähnliche Antworten mit dem letzten von 2017 ..
Boern

Antworten:

837

Wenn Sie definitiv einen absoluten Pfad haben, verwenden Sie Path.GetDirectoryName(path).

Wenn Sie möglicherweise nur einen relativen Namen erhalten, verwenden Sie new FileInfo(path).Directory.FullName.

Beachten Sie, dass Pathund FileInfobeide im Namespace gefunden werden System.IO.

Jon Skeet
quelle
1
Aber gibt es eine Methode namens GetDirectory? Ist es nicht GetDirectoryName?
Brandon
1
Sie können nur DirectoryName anstelle von Directory.FullPath verwenden, nicht wahr?
Steven Robbins
1
Ich habe mich dagegen gewehrt, einen relativen Namen zu erhalten. Ich hatte nicht bemerkt, dass der Weg absolut sein wird. Ich habe jetzt beide Versionen :)
Jon Skeet
Verwenden Sie snippy, um das zu überprüfen? ;)
Shahkalpesh
1
@UlyssesAlves: Ich glaube, new FileInfo(path).Directory.FullNamesollte in beiden Fällen funktionieren.
Jon Skeet
59
System.IO.Path.GetDirectoryName(filename)
Cherian
quelle
22
Path.GetDirectoryName(filename);
Grzenio
quelle
12

Sie können System.IO.Path.GetDirectory(filename)den Pfad verwenden oder in einen verwandeln FileInfound verwenden FileInfo.Directory.

Wenn Sie andere Dinge mit dem Pfad tun, FileInfokann dies Vorteile haben.

Reed Copsey
quelle
1
In der Pfadklasse gibt es keine 'GetDirectory-Methode. Sie müssen 'GetDirectoryName
BillW
12

Verwenden Sie den unten angegebenen Code, um den Ordnerpfad abzurufen

Path.GetDirectoryName(filename);

Dies gibt in Ihrem Fall "C: \ MyDirectory" zurück

thejustv
quelle
10

Sie können Path.GetDirectoryNameden Dateinamen verwenden und einfach übergeben.

MSDN Link

Brandon
quelle
5

Wenn Sie mit einem FileInfoObjekt arbeiten, gibt es eine einfache Möglichkeit, eine stringDarstellung des vollständigen Pfads des Verzeichnisses über die DirectoryNameEigenschaft zu extrahieren .

Beschreibung der FileInfo.DirectoryNameEigenschaft über MSDN:

Ruft eine Zeichenfolge ab, die den vollständigen Pfad des Verzeichnisses darstellt.

Beispielnutzung:

string filename = @"C:\MyDirectory\MyFile.bat";
FileInfo fileInfo = new FileInfo(filename);
string directoryFullPath = fileInfo.DirectoryName; // contains "C:\MyDirectory"

Link zur MSDN-Dokumentation .

Derek W.
quelle
5

Sie können den aktuellen Anwendungspfad abrufen, indem Sie:

string AssemblyPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString();

Viel Glück!

David Castro
quelle
0

Zunächst müssen Sie den System.IO-Namespace verwenden. Dann;

string filename = @"C:\MyDirectory\MyFile.bat";
string newPath = Path.GetFullPath(fileName);

oder

string newPath = Path.GetFullPath(openFileDialog1.FileName));
Umut D.
quelle
0

Sie können Path.GetFullPathfür den größten Teil des Falles verwenden. Wenn Sie den Pfad jedoch auch dann erhalten möchten, wenn sich der Dateiname relativ befindet, können Sie die folgende generische Methode verwenden:

string GetPath(string filePath)
{
  return Path.GetDirectoryName(Path.GetFullPath(filePath))
}

Zum Beispiel:

GetPath("C:\Temp\Filename.txt") Rückkehr "C:\Temp\"

GetPath("Filename.txt")kehre zurück current working directorywie"C:\Temp\"

Minh Nguyen
quelle
0

In meinem Fall musste ich den Verzeichnisnamen eines vollständigen Pfads (eines Verzeichnisses) finden, also tat ich einfach:

var dirName = path.Split('\\').Last();
Amir No-Family
quelle
1
Das OP braucht "C:\MyDirectory"und nicht MyDirectory. Der Rat, String-Manipulationsmethoden zu verwenden, ist riskant, es gibt viele Fallen, verwenden Sie lieber dedizierte PathMethoden.
Sinatr
-1

Path.GetDirectoryName (Context.Parameters ["Assemblypfad"])

Ami Vaknin
quelle
Path.GetDirectoryNamewird in vielen anderen Antworten erwähnt (einschließlich akzeptierter Antwort)
barbsan
ahha? Damit?? Kommt irgendwann ein Punkt?
Ami Vaknin