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.


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.


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



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.


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



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 .


5

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

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

Viel Glück!


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

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\"


0

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

var dirName = path.Split('\\').Last();

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"])


Path.GetDirectoryNamewird in vielen anderen Antworten erwähnt (einschließlich akzeptierter Antwort)
barbsan

ahha? Damit?? Kommt irgendwann ein Punkt?
Ami Vaknin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.