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()
方法会返回最后一个路径组成部分——这将是文件夹名。
该方法适用于路径是否实际存在的情况。但是,该方法需要路径最初以文件名结尾。如果不知道路径是以文件名还是文件夹名结尾,则需要先检查实际路径以查看位置上是否存在文件/文件夹。在这种情况下,Dan Dimitru的答案可能更为合适。
试一下这个:
string filename = @"C:/folder1/folder2/file.txt";
string FolderName = new DirectoryInfo(System.IO.Path.GetDirectoryName(filename)).Name;
简单而干净。仅使用 System.IO.FileSystem
- 运行得很好:
string path = "C:/folder1/folder2/file.txt";
string folder = new DirectoryInfo(path).Name;
DirectoryInfo的作用是去除目录名
string my_path = @"C:\Windows\System32";
DirectoryInfo dir_info = new DirectoryInfo(my_path);
string directory = dir_info.Name; // System32
string dir = @"c:\tmp\test\visual";
Console.WriteLine(dir.Replace(Path.GetDirectoryName(dir) + Path.DirectorySeparatorChar, ""));
输出:
可视化的
string Folder = Directory.GetParent(path).Name;
var fullPath = @"C:\folder1\folder2\file.txt";
var lastDirectory = Path.GetDirectoryName(fullPath).Split('\\').LastOrDefault();
Path.DirectorySeparatorChar
或至少使用在Unix系统上有效且在Windows中作为替代分隔符的斜杠(/)。 - undefined需要注意的是,在循环中获取目录名称列表时,DirectoryInfo
类只会初始化一次,因此只允许第一次调用。为了避免这种限制,请确保在循环内使用变量存储任何单个目录的名称。
例如,此示例代码循环遍历父目录中的目录列表,同时将找到的每个目录名称添加到字符串类型的List中:
[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();
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; } }
另一种方法是使用C# 8.0中引入的Index Struct,将路径拆分并获取路径中倒数第二个元素。
var path = @"C:\folder1\folder2\file.txt";
var folder = path.Split(@"\")[^2]; // 2nd element from the end
Console.WriteLine(folder); // folder2