如何在目录层次结构中输出每个文件和文件夹
问题描述:
我正在寻找一种方法来处理这些文件夹中的所有文件和文件夹及文件。如何在目录层次结构中输出每个文件和文件夹
作为一个例子。
,如果我有
- Root
+ file1
+ file2
-- Directory
-+ file1
-+ file2
---Directory
--+ file1
--+ file2
我想能够输出在程序这些文件中的每一个,这样它会像:
root/file1
root/file2
root/Directory/file1
root/Directory/file2
root/Directory/Directory/file1
root/Directory/Directory/file2
至于匹配的文件夹层次。
有没有办法做到这一点?
感谢
答
你可以使用System.IO.Directory.GetFiles(..,..,System.IO.SearchOption.AllDirectories),返回文件和全路径名数组,然后打印该数组。如果需要排序,则可以递归循环访问目录,而不是在每个目录上使用System.IO.Directory.GetFiles(..,..,System.IO.SearchOption.TopDirectoryOnly)。
答
使用DirectoryInfo类,您的System.IO中的FileInfo类来获取这些细节。
public void PrintAllFiles()
{
DirectoryInfo obj = new DirectoryInfo("E:\\");
foreach (var k in obj.GetFiles())
{
Console.WriteLine(k.FullName);
}
}
答
使用LINQ对于一些提升
var di=new DirectoryInfo(folderPath);
var files=di.GetFiles("*",SearchOption.AllDirectories).Select(f=>f.FullName.Substring(di.FullName.Length+1));
错过的子获得的完整路径。或者,如果你只是想根对象的文件夹名称(例如,如果你没有C:\用户\鲍勃\鱼的目录,你只是想鱼\文件夹,你会做下列..
var di=new DirectoryInfo(folderPath);
var basePath=Path.GetDirectoryName(folderPath);
var files=di.GetFiles("*",SearchOptions.AllDirectorys).Select(f=>f.FullName.Substring(basePth.Length+1));
如果你可以在语句结尾标记一个额外的.Select(f=>f.Replate(@"\","/"))
,你可以使用/作为路径分隔符而不是\
你需要将你的根目录路径传递给静态的'FileHelper'类,它会给你一个所有的列表文件和目录中的文件夹,你可以枚举它们并以任何你想要的方式使用,枚举也可以在main方法中完成,如果你有任何疑问,请告诉我。 – teenup
感谢这个例子。 –