njsgcs 2024-12-02 13:27 采纳率: 100%
浏览 15
已结题

c#得到文件夹里面所有文件名称有什么第三方库

c#得到文件夹里面所有文件名称有什么第三方库

Directory.EnumerateFiles可以访问下一级的文件不能访问上一级的文件,访问大一级的文件会卡死,直接显示进程退出

  • 写回答

1条回答 默认 最新

  • wanghui0380 2024-12-02 17:15
    关注

    没一行代码,无法评价。
    但是大概猜一下,“无限循环递归调用”

    A-----(A1,A2,A3)
    然后你说什么上一级如何如何,假设现在A3,上一级是A。如果你代码逻辑是A再下级,又找到A3了,然后无限套圈循环

    总之这类程序不是微软Directory.EnumerateFiles不行,而是你自己代码要好好处理逻辑,没有什么第3方,给你第3方,你不好好处理逻辑一样挂。

    逻辑陷阱:
    1.无限套圈循环
    2. 非尾递归,堆栈溢出。----要么修改成尾递归,要么利用stack栈

    这玩意呢,微软是有文档的,不过我记不得地址了。问问chatgpt,他也没给明确回复,只是写了两个demo

    很抱歉,我无法直接访问互联网或提供微软网站上的具体文章地址。然而,我可以帮助你基于微软的技术文档描述递归遍历文件系统的常见方法,包括利用栈(stack)来实现非递归的文件遍历。
    
    微软的文档通常会涉及如何使用 System.IO 或 Win32 API(如 FindFirstFile 和 FindNextFile)来遍历目录。如果你正在寻找类似的内容,以下是一个基于 C# 的示例,它模拟了非递归(利用栈)来遍历文件和目录的实现方式。
    
    非递归遍历文件夹(栈实现)
    示例代码(C#)
    CSHARP
    using System;
    using System.Collections.Generic;
    using System.IO;
    
    class Program
    {
        static void Main()
        {
            string rootDirectory = @"C:\Your\Directory\Path"; // 替换为你的路径
    
            // 使用栈进行非递归遍历
            Stack<string> stack = new Stack<string>();
            stack.Push(rootDirectory);
    
            while (stack.Count > 0)
            {
                string currentDir = stack.Pop();
    
                try
                {
                    // 获取当前目录中的所有文件
                    foreach (var file in Directory.GetFiles(currentDir))
                    {
                        Console.WriteLine($"File: {file}");
                    }
    
                    // 获取当前目录中的所有子目录,并推入栈中
                    foreach (var subDir in Directory.GetDirectories(currentDir))
                    {
                        stack.Push(subDir);
                    }
                }
                catch (Exception ex)
                {
                    // 捕获访问异常(例如权限问题)
                    Console.WriteLine($"Error accessing {currentDir}: {ex.Message}");
                }
            }
        }
    }
    代码解释
    栈的作用:
    
    栈用来存储待处理的目录路径。
    每次从栈中弹出一个目录进行处理,同时将其子目录压入栈。
    非递归的好处:
    
    避免了递归方法可能造成的栈溢出。
    更好地控制目录遍历的顺序。
    异常处理:
    
    如果某些目录无法访问(如权限问题),通过 try-catch 捕获异常并跳过。
    递归遍历文件夹
    示例代码(C#)
    CSHARP
    using System;
    using System.IO;
    
    class Program
    {
        static void Main()
        {
            string rootDirectory = @"C:\Your\Directory\Path"; // 替换为你的路径
            TraverseDirectory(rootDirectory);
        }
    
        static void TraverseDirectory(string directory)
        {
            try
            {
                // 遍历文件
                foreach (var file in Directory.GetFiles(directory))
                {
                    Console.WriteLine($"File: {file}");
                }
    
                // 遍历子目录
                foreach (var subDir in Directory.GetDirectories(directory))
                {
                    TraverseDirectory(subDir); // 递归调用
                }
            }
            catch (Exception ex)
            {
                // 捕获访问异常(例如权限问题)
                Console.WriteLine($"Error accessing {directory}: {ex.Message}");
            }
        }
    }
    对比非递归实现
    递归方法简单直接,但对于深层嵌套目录可能导致栈溢出。
    非递归方法通过显式栈避免了递归深度的限制,更适合处理大规模的目录结构。
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月12日
  • 已采纳回答 12月4日
  • 创建了问题 12月2日