2010-09-17 12 views
128
string path = "C:/folder1/folder2/file.txt"; 

Welche Objekte oder Methoden könnte ich verwenden, die mir ein Ergebnis von folder2 geben würden?Abrufen des Ordnernamens aus einem Pfad

string path = "C:/folder1/folder2/file.txt"; 
string lastFolderName = Path.GetFileName(Path.GetDirectoryName(path)); 

Der innere Aufruf GetDirectoryName kehrt den vollständigen Pfad, während der äußere Aufruf GetFileName() die letzte Pfadkomponente wird zurückkehren - die der Ordnername sein:

+5

die letzten Ordnernamen wollen also, wenn Sie C hatte: \ Ordner1 \ folder2 \ ordner3 \ datei.txt, willst du "ordner3"? –

Antwort

238

ich wahrscheinlich so etwas wie verwenden würde.

Dieser Ansatz funktioniert unabhängig davon, ob der Pfad tatsächlich existiert oder nicht. Dieser Ansatz beruht jedoch auf dem Pfad, der anfänglich in einem Dateinamen endet. Wenn unbekannt ist, ob der Pfad in einem Dateinamen oder Ordnernamen endet, müssen Sie den tatsächlichen Pfad überprüfen, um festzustellen, ob eine Datei/ein Ordner an der Position existiert. In diesem Fall kann Dan Dimitrus Antwort angemessener sein.

+0

Danke LBushkin. Guter Trick. Ich habe danach gesucht. –

+81

Eine andere Lösung: return new DirectoryInfo (fullPath) .Name; –

+1

Genie, reines Genie! Vielen Dank! –

-3
// For example: 
String[] filePaths = Directory.GetFiles(@"C:\Nouveau dossier\Source"); 
String targetPath = @"C:\Nouveau dossier\Destination"; 

foreach (String FileD in filePaths) 
{ 
    try 
    { 
    FileInfo info = new FileInfo(FileD); 
    String lastFolderName = Path.GetFileName(Path.GetDirectoryName(FileD)); 

    String NewDesFolder = System.IO.Path.Combine(targetPath, lastFolderName); 
    if (!System.IO.Directory.Exists(NewDesFolder)) 
    { 
     System.IO.Directory.CreateDirectory(NewDesFolder); 
    } 
    String destFile = System.IO.Path.Combine(NewDesFolder, info.Name); 

    File.Move(FileD, destFile); 

    // Try to move 
    Console.WriteLine("Moved"); // Success 
    } 
    catch (IOException ex) 
    { 
    Console.WriteLine(ex); // Write error 
    } 
} 
+1

Wie hängt das mit der Frage zusammen? – smiron

5

ich verwenden, um diesen Codeausschnitt das Verzeichnis für einen Pfad zu erhalten, wenn kein Dateinamen im Pfad:

zum Beispiel „c: \ tmp \ test \ visual“;

string dir = @"c:\tmp\test\visual"; 
Console.WriteLine(dir.Replace(Path.GetDirectoryName(dir) + Path.DirectorySeparatorChar, "")); 

Ausgang:

visuelle

+0

Sie können einfach Path.GetFileName (dir) tun, und es wird den Ordnernamen zurückgegeben. – jrich523

15

Versuchen Sie folgendes:

string filename = @"C:/folder1/folder2/file.txt"; 
string FolderName = new DirectoryInfo(System.IO.Path.GetDirectoryName(filename)).Name; 
1

Im Folgenden Code nur Ordnernamen erhalten hilft

 

public ObservableCollection items = new ObservableCollection(); 

    try 
      { 
       string[] folderPaths = Directory.GetDirectories(stemp); 
       items.Clear(); 
       foreach (string s in folderPaths) 
       { 
        items.Add(new gridItems { foldername = s.Remove(0, s.LastIndexOf('\\') + 1), folderpath = s }); 

       } 

      } 
      catch (Exception a) 
      { 

      } 
    public class gridItems 
    { 
     public string foldername { get; set; } 
     public string folderpath { get; set; } 
    } 
2
var fullPath = @"C:\folder1\folder2\file.txt"; 
var lastDirectory = Path.GetDirectoryName(fullPath).Split('\\').LastOrDefault(); 
-1

Dies ist hässlich, aber vermeidet Zuweisungen:

private static string GetFolderName(string path) 
{ 
    var end = -1; 
    for (var i = path.Length; --i >= 0;) 
    { 
     var ch = path[i]; 
     if (ch == System.IO.Path.DirectorySeparatorChar || 
      ch == System.IO.Path.AltDirectorySeparatorChar || 
      ch == System.IO.Path.VolumeSeparatorChar) 
     { 
      if (end > 0) 
      { 
       return path.Substring(i + 1, end - i - 1); 
      } 

      end = i; 
     } 
    } 

    if (end > 0) 
    { 
     return path.Substring(0, end); 
    } 

    return path; 
} 
4

Einfache & sauber. Nur Anwendungen System.IO.FileSystem - wirkt wie ein Zauber:

string path = "C:/folder1/folder2/file.txt"; 
string folder = new DirectoryInfo(path).Name; 
1

Directory macht den Job Sie Verzeichnisnamen abzustreifen

string my_path = @"C:\Windows\System32"; 
DirectoryInfo dir_info = new DirectoryInfo(my_path); 
string directory = dir_info.Name; // System32 
Verwandte Themen