gpt4 book ai didi

c# - 使用 C# 扫描具有向下钻取功能的驱动器?

转载 作者:行者123 更新时间:2023-11-30 19:22:35 24 4
gpt4 key购买 nike

我正在尝试创建一个扫描驱动器的应用程序。但是,棘手的部分是我的驱动器包含一组文件夹,这些文件夹在文件夹中有文件夹并包含文档。我正在尝试扫描驱动器,拍摄所有文档和文件夹的“快照”并转储到 .txt 文件中。
我第一次运行这个应用程序时,输出将是一个包含所有文件夹和文件的文本文件。
我第二次运行此应用程序时,它将获取 2 个文本文件(我第二次运行该应用程序时生成的文件和我第一次运行该应用程序时生成的 .txt 文件)并比较它们...报告内容已被移动/覆盖/删除。

有人有这方面的代码吗?我是 C# 方面的新手,非常感谢任何帮助。

提前致谢。

最佳答案

我们在 80 年代学到的一件事是,如果使用递归进行文件系统遍历真的很诱人,但当你这样做时,有人会制作一个具有嵌套级别的文件系统,这会导致你的堆栈溢出。最好使用基于堆的文件系统遍历。

这是我拼凑的一个类,它就是这样做的。它不是很漂亮,但它做得很好:

using System;
using System.IO;
using System.Collections.Generic;

namespace DirectoryWalker
{
public class DirectoryWalker : IEnumerable<string>
{
private string _seedPath;
Func<string, bool> _directoryFilter, _fileFilter;

public DirectoryWalker(string seedPath) : this(seedPath, null, null)
{
}

public DirectoryWalker(string seedPath, Func<string, bool> directoryFilter, Func<string, bool> fileFilter)
{
if (seedPath == null)
throw new ArgumentNullException(seedPath);
_seedPath = seedPath;
_directoryFilter = directoryFilter;
_fileFilter = fileFilter;
}

public IEnumerator<string> GetEnumerator()
{
Queue<string> directories = new Queue<string>();
directories.Enqueue(_seedPath);
Queue<string> files = new Queue<string>();
while (files.Count > 0 || directories.Count > 0)
{
if (files.Count > 0)
{
yield return files.Dequeue();
}

if (directories.Count > 0)
{
string dir = directories.Dequeue();
string[] newDirectories = Directory.GetDirectories(dir);
string[] newFiles = Directory.GetFiles(dir);
foreach (string path in newDirectories)
{
if (_directoryFilter == null || _directoryFilter(path))
directories.Enqueue(path);
}
foreach (string path in newFiles)
{
if (_fileFilter == null || _fileFilter(path))
files.Enqueue(path);
}
}
}
}

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}

典型的用法是这样的:

DirectoryWalker walker = new DirectoryWalker(@"C:\pathToSource\src", null, (x => x.EndsWith(".cs")));
foreach (string s in walker)
{
Console.WriteLine(s);
}

递归列出所有以“.cs”结尾的文件

关于c# - 使用 C# 扫描具有向下钻取功能的驱动器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/935931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com