如果我有一个字符串变量,其中包含:
"C:\temp\temp2\foo\bar.txt"
我想要获取"foo",请问最佳方法是什么?
使用:
new FileInfo(@"C:\temp\temp2\foo\bar.txt").Directory.Name
虽然我不想和Skeet有任何分歧,但我一直使用
Path.GetFileNameWithoutExtension(@"C:\temp\temp2\foo\bar.txt")
我怀疑FileInfo实际上会访问文件系统以获取信息,而GetFileNameWithoutExtension只进行字符串操作-因此,其中一个的性能可能更好。
Path.GetFileName(Path.GetDirectoryName(filepath))
- 在测试中看起来可以完成任务,并且不会触及文件系统。 - Chris JDirectoryInfo dinfo = new DirectoryInfo(path);以上代码可以获取指定路径下文件夹的名称。
string folderName= dinfo.Parent.Name;
我曾经遇到过一个情况,当时我正在循环遍历父子目录。
string[] years = Directory.GetDirectories(ROOT);
foreach (var year in years)
{
DirectoryInfo info = new DirectoryInfo(year);
Console.WriteLine(info.Name);
Console.WriteLine(year);
//Month directories
string[] months = Directory.GetDirectories(year);
foreach (var month in months)
{
Console.WriteLine(month);
//Day directories
string[] days = Directory.GetDirectories(month);
foreach (var day in days)
{
//checkes the files in the days
Console.WriteLine(day);
string[] files = Directory.GetFiles(day);
foreach (var file in files)
{
Console.WriteLine(file);
}
}
}
}
DirectoryInfo info = new DirectoryInfo(year);
Console.WriteLine(info.Name);
这将取决于您如何处理数据,但另一个选项是使用String.Split。
string myStr = @"C:\foo\bar.txt";
string[] paths = myStr.Split('\\');
string dir = paths[paths.Length - 2]; //returns "foo"
这段代码没有检查数组越界异常,但你可以理解其意思。
new FileInfo(@"C:\ temp \ temp2 \ foo \ bar.txt") .DirectoryName
。 - Danilo Bargen