C# 如何在对文件系统的一次调用中获得目录结构?

C# 如何在对文件系统的一次调用中获得目录结构?,c#,.net,file,vsto,C#,.net,File,Vsto,我有一个VSTO应用程序,它可以浏览目录,并以某种格式在excel工作表中列出子文件夹和文件。我目前使用的是DirectoryInfo和FileInfo,但处理起来需要很长时间。该目录位于网络共享上。似乎GetFiles或GetDirectories上的每个枚举都是对文件系统的单独调用。实际上我只对某个文件夹下的目录结构感兴趣。我只想提取子文件夹和文件的名称和路径。是否有某种方法可以在对文件系统的一次调用中检索此结构的完整概述?我有什么选择 编辑: 我使用的是.NET 4.0,我想不起来有什么东

我有一个VSTO应用程序,它可以浏览目录,并以某种格式在excel工作表中列出子文件夹和文件。我目前使用的是
DirectoryInfo
FileInfo
,但处理起来需要很长时间。该目录位于网络共享上。似乎
GetFiles
GetDirectories
上的每个枚举都是对文件系统的单独调用。实际上我只对某个文件夹下的目录结构感兴趣。我只想提取子文件夹和文件的名称和路径。是否有某种方法可以在对文件系统的一次调用中检索此结构的完整概述?我有什么选择

编辑:


我使用的是.NET 4.0,我想不起来有什么东西可以在一次调用中获得整个树


我知道这并不能完全解决您的问题,但您可以在目录和文件仍在加载时使用和枚举它们。不幸的是,这并没有减少总的加载时间,但通常进度的出现会减少等待的痛苦。

在所有驱动器中所有目录c#

公共列表getDirectoryStructure() { 列表驱动器=新列表(); string[]drives=System.Environment.GetLogicalDrives(); foreach(驱动器中的字符串dr) { System.IO.DriveInfo di=新的System.IO.DriveInfo(dr); //在这里,如果驱动器还没有准备好读取,我们将跳过它 //不一定是所有场景中的适当操作。 如果(!di.IsReady) { 继续; } drives.Add(di.RootDirectory); } 回程驱动器 }
要查找特定目录,请在子目录上递归枚举。

您使用的是.NET的哪个版本?如果我没有记错,则无法快速获得目录列表。我开始在这里搜索,最后我做了一个进度条。我没有时间做很多研究。这只是一个内部项目。
    public List<DirectoryInfo> getDirectoryStructure()
    {
        List<DirectoryInfo> drives = new List<DirectoryInfo>();
        string[] drives = System.Environment.GetLogicalDrives();
        foreach (string dr in drives)
        {
            System.IO.DriveInfo di = new System.IO.DriveInfo(dr);

            // Here we skip the drive if it is not ready to be read. This
            // is not necessarily the appropriate action in all scenarios.
            if (!di.IsReady)
            {
                continue;
            }
            drives.Add( di.RootDirectory);
        }
        return drives
    }