在C#中从完整的文件pathparsing目录名
如果我有一个stringvariables有:
"C:\temp\temp2\foo\bar.txt"
我想得到
“富”
做这个的最好方式是什么?
使用:
new FileInfo(@"C:\temp\temp2\foo\bar.txt").Directory.Name
我不同意这个Skeet,但我总是用它
Path.GetFileNameWithoutExtension(@"C:\temp\temp2\foo\bar.txt")
我怀疑FileInfo实际上触及文件系统来获取它的信息,因为我期望GetFileNameWithoutExtension只是string操作 – 所以一个在另一个上的性能可能会更好。
我认为最简单的解决scheme是
DirectoryInfo dinfo = new DirectoryInfo(path); stringfolderName = dinfo.Parent.Name;
基于Handleman的build议,你可以这样做:
Path.GetFileName(Path.GetDirectoryName(path))
这不会触及文件系统(与FileInfo
不同),并且会执行所需的操作。 这将与文件夹一起工作,因为如MSDN所说:
返回值:path中最后一个目录字符后面的字符。 如果path的最后一个字符是目录或卷分隔符,则此方法返回String.Empty。 如果path为null,则此方法返回null。
另外,查看参考源确认GetFilename
不关心传入的path是文件还是文件夹:它只是在执行纯string操作。
当我通过父子目录循环时,我有一个场合
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);
这取决于你想如何处理数据,但另一种select是使用String.Split。
string myStr = @"C:\foo\bar.txt"; string[] paths = myStr.Split('\\'); string dir = paths[paths.Length - 2]; //returns "foo"
这不检查数组越界例外,但你明白了。