首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当存在空子目录时,调试GetAllFilesAndDirectories方法

当存在空子目录时,调试GetAllFilesAndDirectories方法
EN

Stack Overflow用户
提问于 2009-10-10 04:36:45
回答 3查看 457关注 0票数 1

此方法用于获取文件、目录和子目录及其内容,除非其中一个子目录恰好为空。

代码语言:javascript
复制
public static IEnumerable<FileSystemInfo> GetAllFilesAndDirectories ( string dir ) {

        DirectoryInfo dirInfo = new DirectoryInfo( dir );
        Stack<FileSystemInfo> stack = new Stack<FileSystemInfo>();

        stack.Push( dirInfo );
        while ( dirInfo != null || stack.Count > 0 ) {
            FileSystemInfo fileSystemInfo = stack.Pop();
            DirectoryInfo subDirectoryInfo = fileSystemInfo as DirectoryInfo;
            if ( subDirectoryInfo != null ) {
                yield return subDirectoryInfo;
                foreach ( FileSystemInfo fsi in subDirectoryInfo.GetFileSystemInfos() ) {
                    stack.Push( fsi );
                }
                dirInfo = subDirectoryInfo;
            } else {
                yield return fileSystemInfo;
                dirInfo = null;
            }
        }

}

例外情况是:

堆栈未处理“Stack Message=”。Source=“系统”

有什么办法解决这个问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-10 04:43:43

我向question you asked a little while ago添加了另一个答案,它将帮助您避免这种情况,因为您将使用与这里使用的完全不同(且更容易阅读)的代码。

但是,为了节省您查找的时间,请参阅本文,了解递归读取文件/目录的不同方法。

http://support.microsoft.com/kb/303974

我知道这不是这个特定问题的答案,但是当有一个更容易处理的完全可行的解决方案时,为什么还要花费时间来修复一个有but的解决方案呢?

票数 0
EN

Stack Overflow用户

发布于 2009-10-12 01:44:30

在while循环中将||更改为&&。

票数 1
EN

Stack Overflow用户

发布于 2009-10-12 01:41:49

代码语言:javascript
复制
while (stack.Count > 0)

您的while正在与堆栈一起工作。

即使您开始从子目录收集数据,堆栈也不是空的。

但是当你从空的子目录和目录列表末尾的子目录进行收集时,你的堆栈是空的,没有理由继续搜索。

完整的固定代码是:

代码语言:javascript
复制
    public static IEnumerable<FileSystemInfo> GetAllFilesAndDirectories(string dir)
    {
        DirectoryInfo dirInfo = new DirectoryInfo(dir);
        Stack<FileSystemInfo> stack = new Stack<FileSystemInfo>();
        stack.Push(dirInfo);
        while (stack.Count > 0)
        {
            FileSystemInfo fileSystemInfo = stack.Pop();
            DirectoryInfo subDirectoryInfo = fileSystemInfo as DirectoryInfo;
            if (subDirectoryInfo != null)
            {
                yield return subDirectoryInfo;
                foreach (FileSystemInfo fsi in subDirectoryInfo.GetFileSystemInfos())
                {
                    stack.Push(fsi);
                }
            }
            else
            {
                yield return fileSystemInfo;
            }
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1547061

复制
相关文章

相似问题

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