string path = "C:/folder1/folder2/file.txt";
Какие объекты или методы я мог бы использовать, чтобы дать мне результат folder2
?
string path = "C:/folder1/folder2/file.txt";
Какие объекты или методы я мог бы использовать, чтобы дать мне результат folder2
?
Ответы:
Я бы, вероятно, использовал что-то вроде:
string path = "C:/folder1/folder2/file.txt";
string lastFolderName = Path.GetFileName( Path.GetDirectoryName( path ) );
Внутренний вызов GetDirectoryName
вернет полный путь, а внешний вызов GetFileName()
вернет последний компонент пути, который будет именем папки.
Этот подход работает независимо от того, существует ли путь на самом деле. Этот подход, однако, опирается на путь, изначально заканчивающийся именем файла. Если неизвестно, заканчивается ли путь в имени файла или имени папки - тогда необходимо проверить фактический путь, чтобы увидеть, существует ли файл / папка в этом месте. В этом случае ответ Дана Димитру может быть более уместным.
Просто и чисто. Только использует System.IO.FileSystem
- работает как шарм:
string path = "C:/folder1/folder2/file.txt";
string folder = new DirectoryInfo(path).Name;
file.txt
, а неfolder2
Я использовал этот фрагмент кода, чтобы получить каталог для пути, когда в пути нет имени файла:
например "c: \ tmp \ test \ visual";
string dir = @"c:\tmp\test\visual";
Console.WriteLine(dir.Replace(Path.GetDirectoryName(dir) + Path.DirectorySeparatorChar, ""));
Вывод:
визуальный
Также важно отметить, что при получении списка имен каталогов в цикле DirectoryInfo
класс инициализируется один раз, поэтому допускается только первый вызов. Чтобы обойти это ограничение, убедитесь, что вы используете переменные в вашем цикле для хранения любого отдельного имени каталога.
Например, этот пример кода просматривает список каталогов в любом родительском каталоге, добавляя каждое найденное имя каталога в список строкового типа:
[C #]
string[] parentDirectory = Directory.GetDirectories("/yourpath");
List<string> directories = new List<string>();
foreach (var directory in parentDirectory)
{
// Notice I've created a DirectoryInfo variable.
DirectoryInfo dirInfo = new DirectoryInfo(directory);
// And likewise a name variable for storing the name.
// If this is not added, only the first directory will
// be captured in the loop; the rest won't.
string name = dirInfo.Name;
// Finally we add the directory name to our defined List.
directories.Add(name);
}
[VB.NET]
Dim parentDirectory() As String = Directory.GetDirectories("/yourpath")
Dim directories As New List(Of String)()
For Each directory In parentDirectory
' Notice I've created a DirectoryInfo variable.
Dim dirInfo As New DirectoryInfo(directory)
' And likewise a name variable for storing the name.
' If this is not added, only the first directory will
' be captured in the loop; the rest won't.
Dim name As String = dirInfo.Name
' Finally we add the directory name to our defined List.
directories.Add(name)
Next directory
Ниже код помогает получить только имя папки
public ObservableCollection items = new ObservableCollection (); пытаться { string [] folderPaths = Directory.GetDirectories (stemp); items.Clear (); foreach (строка s в folderPaths) { items.Add (new gridItems {foldername = s.Remove (0, s.LastIndexOf ('\\') + 1), folderpath = s}); } } поймать (исключение а) { } общедоступный класс gridItems { public string foldername {get; устанавливать; } public string folderpath {get; устанавливать; } }
Это некрасиво, но избегает выделения:
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;
}