首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectoryInfo对象未发布

DirectoryInfo对象未发布
EN

Stack Overflow用户
提问于 2017-02-18 00:43:14
回答 2查看 415关注 0票数 0

我正在创建一个应用程序,它循环遍历目录中的目录,并使用以下代码将它们写入控制台:

代码语言:javascript
复制
public void checkDirectory(string directory)
{
    Console.WriteLine("Checking... " + directory);

    DirectoryInfo di = new DirectoryInfo(directory);
    try
    {

        foreach (DirectoryInfo d in di.EnumerateDirectories())
        {
            checkDirectory(d.FullName);
        }

    }
    catch (System.UnauthorizedAccessException)
    {
        cantAccessCount++;
        unableToAccess.AppendLine("Cannot access directory " + directory);
    }
}

代码循环遍历所有目录,并按预期将目录输出到控制台,但是当我在网络路径"\myserver\myfolder“上运行它时,如果我转到并查看"myserver”上打开的文件,它会将目录及其所有子目录显示为打开的文件。有没有什么方法可以确保它们在结束时是关闭的?

EN

回答 2

Stack Overflow用户

发布于 2017-02-18 01:03:22

也许这是由于递归调用造成的。有一个接受SearchOption参数的重载版本的EnumerateDirectories。它使您能够遍历所有子目录:

代码语言:javascript
复制
foreach (DirectoryInfo d in di.EnumerateDirectories("*", SearchOption.AllDirectories))
{
    Console.WriteLine(d.FullName);
}
票数 0
EN

Stack Overflow用户

发布于 2017-02-18 01:18:09

我刚刚测试了我之前写的一些代码,它没有在服务器上为我显示任何打开的目录(或文件),只有打开的会话本身,你可以测试它:

代码语言:javascript
复制
class Program
{
    static ConcurrentQueue<string> dirQueue = new ConcurrentQueue<string>();

    static void Main(string[] args)
    {
        dirQueue.Enqueue(@"\\SomePC\SomeFolder");
        fetch();
        Console.ReadLine();
    }

    static void fetch()
    {
        string currentDirectory;

        do
        {
            if (dirQueue.TryDequeue(out currentDirectory))
            {
                try
                {
                    IEnumerable<string> newDirectories = Directory.EnumerateDirectories(currentDirectory, "*.*", SearchOption.TopDirectoryOnly);
                    Array.ForEach(newDirectories.ToArray(), dirQueue.Enqueue);

                    Console.WriteLine("{1}", currentDirectory);
                }
                catch (UnauthorizedAccessException ex)
                {
                    Debug.WriteLine(ex.Message);
                }
            }
        } while (!dirQueue.IsEmpty);
    }
}

这只是我拼凑出来的一个快速拷贝,原件是一个线程版本,所以你可能需要修改一些东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42303149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档