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

Какие объекты или методы я могу использовать, что даст мне результат folder2?Получение имени папки с пути

+5

Вы Хотеть имя последней папки, так что если у вас C: \ folder1 \ folder2 \ folder3 \ file.txt, вы хотите «folder3»? –

ответ

238

я бы, вероятно, использовать что-то вроде:

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

Внутренний вызов GetDirectoryName возвращает полный путь, в то время как внешний вызов GetFileName() возвращает последний путь компонент - который будет имя папки.

Этот подход работает, действительно ли путь существует. Однако этот подход полагается на путь, первоначально заканчивающийся на имя файла. Если неизвестно, заканчивается ли путь в имени файла или имени папки, то для этого требуется, чтобы вы проверяли фактический путь, чтобы увидеть, существует ли файл/папка в месте сначала. В этом случае ответ Дэн Димитру может быть более уместным.

+0

Спасибо, Л.Бушкин. Хороший трюк. Я искал это. –

+81

Другое решение: return new DirectoryInfo (fullPath) .Name; –

+1

Гений, чистый гений! Благодаря! –

-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

Как это относится к вопросу? – smiron

5

Я использовал этот код, чтобы получить каталог на пути, когда имя файла не находится в пути:

, например, «C: \ TMP \ Test \ визуальный»;

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

Выход:

визуальный

+0

Вы можете просто создать Path.GetFileName (dir), и оно вернет имя папки просто отлично. – jrich523

15

Попробуйте это:

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

Ниже код помогает получить имя папки только

 

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

Это некрасиво, но избегает распределения:

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

Простых & чистого. Только использует System.IO.FileSystem - работает как шарм:

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

DirectoryInfo делает работу раздеться имя каталога

string my_path = @"C:\Windows\System32"; 
DirectoryInfo dir_info = new DirectoryInfo(my_path); 
string directory = dir_info.Name; // System32 
Смежные вопросы