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

folder2 sonucu bana hangi nesne veya yöntemleri kullanabilirim?Klasörün adını bir yoldan alma

+5

son klasör adını isteyen var şerit işi yapar: \ klasör1 \ klasor2 \ folder3 \ file.txt, "folder3" ister misiniz? –

cevap

238

Herhalde böyle bir şey kullanırsınız:

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

GetFileName() dış çağrı geçen yol bileşenini dönecektir olurken, tam yolunu döndürür GetDirectoryName iç çağrı - klasör adı olacaktır.

Bu yaklaşım, yolun gerçekten var olup olmadığını çalışır. Bununla birlikte, bu yaklaşım, başlangıçta bir dosya adıyla biten yola dayanır. Yolun bir dosya adı veya klasör adıyla bitip bitmediği bilinmiyorsa, önce bir dosya/klasörün önce var olup olmadığını görmek için asıl yolu kontrol etmenizi gerektirir. Bu durumda Dan Dimitru'nun cevabı daha uygun olabilir. örneğin

: bir dosya adı yolunda olduğu zaman

+0

Teşekkürler LBushkin. İyi numara. Bunu arıyorum. –

+81

Başka bir çözüm: yeni DirectoryInfo (fullPath) döndürdü. –

+1

Genius, saf deha! Teşekkürler! –

-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

Bu soruyla nasıl ilgilidir? – smiron

5

bir yol için dizin almak için bu kod parçacığını kullanılan "C: görsel \ \ tmp \ test";

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

Çıktı:

görsel

+0

Sadece Path.GetFileName (dizin) komutunu yazabilir ve klasör adını yeni gönderirsiniz. – jrich523

15

bu deneyin:

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

kod klasör adını sadece

 

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; } 
    } 
almak için yardımcı olur Aşağıda
2
var fullPath = @"C:\folder1\folder2\file.txt"; 
var lastDirectory = Path.GetDirectoryName(fullPath).Split('\\').LastOrDefault(); 
-1

Bu çirkin ama tahsisleri önler: &

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

Basit temiz. Sadece System.IO.FileSystem kullanır - bir cazibe gibi çalışır:

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

DirectoryInfo dizin Adını sen c vardı eğer öyleyse

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