如何输出目录层次结构中的每个文件和文件夹

时间:2011-08-24 11:18:30

标签: c# file getfiles getdirectories

我正在寻找一种方法来处理这些文件夹中的所有文件和文件夹。

作为一个例子。

如果我有

- 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

与文件夹层次结构匹配。

有没有这样做?

由于

4 个答案:

答案 0 :(得分:2)

以下示例完全符合您的要求: -

http://www.dotnetperls.com/recursively-find-files

答案 1 :(得分:1)

使用System.fo类,System.IO中的FileInfo类来获取这些详细信息。

 public void PrintAllFiles()
    {
        DirectoryInfo obj = new DirectoryInfo("E:\\");
        foreach (var k in obj.GetFiles())
        {
            Console.WriteLine(k.FullName);
        }
    }

答案 2 :(得分:1)

使用Linq进行一些提升

var di=new DirectoryInfo(folderPath);
var files=di.GetFiles("*",SearchOption.AllDirectories).Select(f=>f.FullName.Substring(di.FullName.Length+1));

错过子字符串以获取完整路径。或者,如果您只想要根对象的文件夹名称(例如,如果您将c:\ users \ bob \ fish作为目录,并且您只需要fish \ foldername,则可以执行以下操作。

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(@"\","/")),则可以使用/作为路径分隔符而不是\

答案 3 :(得分:0)

您可以使用System.IO.Directory.GetFiles(..,..,System.IO.SearchOption.AllDirectories),它返回文件数组和完整路径名,然后打印该数组。如果你需要排序,你可以递归遍历目录并在每个目录上使用System.IO.Directory.GetFiles(..,..,System.IO.SearchOption.TopDirectoryOnly)。