Ruft den Ordnernamen aus dem vollständigen Dateipfad ab

116

Wie erhalte ich den Ordnernamen aus dem vollständigen Pfad der Anwendung?

Dies ist der Dateipfad unten,

c:\projects\root\wsdlproj\devlop\beta2\text

Hier ist "Text" der Ordnername.

Wie kann ich diesen Ordnernamen von diesem Pfad erhalten?

vasmay
quelle

Antworten:

205

Siehe DirectoryInfo.Name :

string dirName = new DirectoryInfo(@"c:\projects\roott\wsdlproj\devlop\beta2\text").Name;
Alex Pacurar
quelle
Erfordert dies nicht, dass der Ordner tatsächlich im Dateisystem vorhanden ist (der Ordnername wäre immer noch "Text" für diesen vollständigen Dateipfad, wenn der Ordner "c: \ projects \ root \ wsdlproj \ devlop \ beta2 \ text" dies nicht tut ( derzeit) im Dateisystem vorhanden)?
Peter Mortensen
@ PeterMortensen, nein. Ich habe dies gerade getestet und die Methode gibt den Namen des Ordners der untersten Ebene aus der Zeichenfolge zurück, auch wenn der Ordnerpfad nicht vorhanden ist.
Vbguyny
1
Danke, tolle Antwort. Aber ich bin ein wenig verwirrt, dass System.IO.Directory eine solche Operation nicht unterstützt.
Anhoppe
1
@anhoppe - ich stimme zu. Eine andere Option, die ich gesehen habe, ist Path.GetDirectoryName msdn.microsoft.com/en-us/library/… - kann sie aber erst morgen testen.
Don Cheadle
30

Ich denke, Sie möchten den Namen des übergeordneten Ordners vom Dateipfad abrufen. Es ist leicht zu bekommen. Eine Möglichkeit besteht darin, ein FileInfoTypobjekt zu erstellen und seine DirectoryEigenschaft zu verwenden.

Beispiel:

FileInfo fInfo = new FileInfo("c:\projects\roott\wsdlproj\devlop\beta2\text\abc.txt");

String dirName = fInfo.Directory.Name;
Shekhar
quelle
16

Versuche dies

var myFolderName = @"c:\projects\roott\wsdlproj\devlop\beta2\text";
var result = Path.GetFileName(myFolderName);
Øyvind Bråthen
quelle
Wenn Sie einen Dateinamen in Zeichenfolge haben, gibt es auch Dateinamen zurück
swissben
1
In diesem Fall ist Text der Dateiname (ohne Erweiterung). Ich dachte, das war es, wonach das OP strebte. Ob es sich um einen Ordner oder einen Dateinamen handelt, spielt eigentlich keine Rolle. Wenn die Zeichenfolge den Dateinamen nicht enthält, gibt ihm dieser Code, wonach er sucht.
Øyvind Bråthen
4
Es sei denn, der Weg endet mit einem \ wie folgt:@"c:\projects\roott\wsdlproj\devlop\beta2\text\"
Kristof Claes
1
Dies funktioniert nicht für einen Ordner. Ich bekomme eine leere Schnur. Es muss eine Datei vorhanden sein
BraveNewMath
3
Dies funktioniert einwandfrei, wenn der Ordnerpfad keinen abschließenden Backslash enthält (wie zum Beispiel einen von Path.GetDirectoryName () zurückgegebenen Ordnerpfad ). Der Name dieser Funktion, GetFileName (), ist jedoch etwas irreführend.
Peter Mortensen
9

Sie könnten dies verwenden:

string path = @"c:\projects\roott\wsdlproj\devlop\beta2\text";
string lastDirectory = path.Split(new char[] { System.IO.Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries).Last();
Kristof Claes
quelle
Was ist, wenn der Pfad so aussieht: @ "c: \ projects \ roott \ wsdlproj \ devlop \ beta2 \ text \", also mit einem zusätzlichen DirectorySeparatorChar
Alex Pacurar
1
@Alex - Ich habe meinen Code so geändert, dass er auch mit solchen Pfaden funktioniert. StringSplitOptions.RemoveEmptyEntriesmacht den Trick.
Kristof Claes
Laut msdn.microsoft.com/en-us/library/… kann FileInfo eine Ausnahme auslösen , wenn die erforderliche Berechtigung nicht erteilt wird.
Daniel B
5

Einfach benutzen Path.GetFileName

Hier - Extrahieren Sie den Ordnernamen aus dem vollständigen Pfad eines Ordners:

string folderName = Path.GetFileName(@"c:\projects\root\wsdlproj\devlop\beta2\text");//Return "text"

Hier ist ein Extra - Extrahieren Sie den Ordnernamen aus dem vollständigen Pfad einer Datei:

string folderName = Path.GetFileName(Path.GetDirectoryName(@"c:\projects\root\wsdlproj\devlop\beta2\text\GTA.exe"));//Return "text"
123iamking
quelle
3

Ich dachte, es gibt keine andere Möglichkeit, als in das Dateisystem zu gehen, um herauszufinden, ob text.txt ein Verzeichnis oder nur eine Datei ist. Wenn Sie etwas Einfaches wollten, können Sie vielleicht einfach verwenden:

s.Substring(s.LastIndexOf(@"\"));
Zuoanqh
quelle
1
So vermeiden Sie einen Schrägstrich an der Vorderseite der Zeichenfolge: s.Substring (s.LastIndexOf (@ "\") + 1);
David Yates
2

In diesem Fall wird die Datei, die Sie erhalten möchten, in der Variablen strpath gespeichert:

string strPath = Server.MapPath(Request.ApplicationPath) + "/contents/member/" + strFileName;
krishna
quelle
2

Hier ist eine alternative Methode, die für mich funktioniert hat, ohne ein DirectoryInfo-Objekt erstellen zu müssen. Der entscheidende Punkt ist, dass dies GetFileName()funktioniert, wenn der Pfad keinen abschließenden Schrägstrich enthält.

var name = Path.GetFileName(path.TrimEnd(Path.DirectorySeparatorChar));

Beispiel:

var list = Directory.EnumerateDirectories(path, "*")
        .Select(p => new
        {
            id = "id_" + p.GetHashCode().ToString("x"),
            text = Path.GetFileName(p.TrimEnd(Path.DirectorySeparatorChar)),
            icon = "fa fa-folder",
            children = true
        })
        .Distinct()
        .OrderBy(p => p.text);
Roberto
quelle
1

Dies kann auch so gemacht werden;

var directoryName = System.IO.Path.GetFileName(@"c:\projects\roott\wsdlproj\devlop\beta2\text");
Steve Cooper
quelle
Dies wird eine leere Zeichenfolge zurückgeben
disklosr
@disklosr - gerade mit ScriptCs getestet und es gibt 'Text' zurück
Steve Cooper
2
Dies funktioniert einwandfrei, wenn der Ordnerpfad keinen abschließenden Backslash enthält (wie zum Beispiel einen von Path.GetDirectoryName () zurückgegebenen Ordnerpfad ). Der Name dieser Funktion, GetFileName (), ist jedoch etwas irreführend.
Peter Mortensen
0

Basierend auf vorherigen Antworten (aber behoben)

using static System.IO.Path;

var dir = GetFileName(path?.TrimEnd(DirectorySeparatorChar, AltDirectorySeparatorChar));

Erläuterung von GetFileNameaus .NET-Quelle :

Gibt den Namen und die Erweiterungsteile des angegebenen Pfads zurück. Die resultierende Zeichenfolge enthält die Zeichen des Pfads, die dem letzten Backslash ("\"), Slash ("/") oder Doppelpunkt (":") im Pfad folgen. Die resultierende Zeichenfolge ist der gesamte Pfad, wenn der Pfad nach dem Entfernen von nachgestellten Schrägstrichen, Schrägstrichen oder Doppelpunktzeichen keinen Backslash enthält. Die resultierende Zeichenfolge ist null, wenn der Pfad null ist.

Marsze
quelle
-3
Path.GetDirectoryName(@"c:\projects\roott\wsdlproj\devlop\beta2\text");

MSDN: Path.GetDirectoryName-Methode

swissben
quelle
11
Dies wird zurückkehren c:\projects\roott\wsdlproj\devlop\beta2, und das war nicht das, wonach das OP gesucht hat.
Øyvind Bråthen