扫描过去 24 小时目录中的更改的控制台应用(已关闭)

本文关键字:应用 控制台 过去 小时 扫描 | 更新日期: 2023-09-27 18:32:10

>我正在创建一个程序,该程序扫描过去 24 小时内给定目录中的所有文件及其所有子目录中的更改,而不是创建或删除。我看过很多其他示例/教程,但并非所有示例/教程都能满足您的需求。

这是我到目前为止的代码:

using System.IO;
public static void Main(string[] args)
{
    string myDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"C:'Path");
    var directory = new DirectoryInfo(myDirectory);
    DateTime from_date = DateTime.Now.AddDays(-1);
    DateTime to_date = DateTime.Now;
    var files = directory.GetFiles()
                         .Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date)
                         .ToArray();
    Console.WriteLine();
}

问题是上面的代码只告诉我目录中的最后一次更改。我想要的是目录中所有更改的日志。

我是一个学习型的学生,所以很多解释会很棒! :)

我不是,我

再说一遍不是,寻找文件系统观察者,我不希望我的服务器连续 24 小时保持打开状态。我想每 24 小时启动一次该程序,制作日志,关闭它。如果有人能帮助我解决这个问题,或者至少给我一些开始的东西,我将不胜感激!

编辑

我终于有了通过另一个代码工作的目标,一个完全不同的代码。我要感谢大家对我的帮助,提高了我对几件事的理解

扫描过去 24 小时目录中的更改的控制台应用(已关闭)

如果没有

FileSystemWatcher,您必须有一个用于比较差异的外部文件。

所以在第一次运行时你会得到

文件 1
文件 2
文件 3

没有变化!

下次运行可能会得到

文件 1
文件 3
文件 4

您将能够比较第一个列表以显示文件 2 丢失而文件 4 是新的......

这是不可能的。文件都没有更改日志,操作系统也不会写入此类日志。只有您能获得的信息是上次写入时间。如果您需要整个日志,那么您应该手动创建它(例如,使用 FileSystemWatcher 创建 Windows 服务),或者您可以考虑使用一些版本控制系统,该系统跟踪对文件的所有更改(在这种情况下,对文件的更改应通过版本控制软件完成)。

正如其他人已经写的那样: 如果没有文件系统观察程序或存储文件列表,您将没有机会检测到已删除的文件。也可以更改文件日期(但是,我不知道是否可以更改上次写入时间或仅更改创建时间)。此外,重命名文件通常不会更改任何文件日期。

问题是上面的代码只告诉我目录中的最后一次更改

我在

VS 2010中测试了您的代码,在调试器中,我在变量文件中看到了多个条目。也许您在目录本身中只有一个修改的文件,而在子目录中有其他更改的文件(请参阅 belov)?也许你的输出是错误的?如果目录中确实有多个最近更改的文件,我建议对中间结果使用一个额外的变量来检查错误发生的位置。(做目录。GetFiles() 给你一个不完整的文件列表,或者过滤器在哪里有问题?

最后但并非最不重要的一点是,你写

以及他所有的子目录

根据MSDN GetFiles仅返回当前目录中的文件。如果你还需要子目录,你必须递归到它们。当然,在添加递归之前,您应该解决文件列表不完整的问题。

希望有帮助

根据您的需要,这可能(据我所知)甚至不可能在 .NET 中干净地完成 - 您真正想要的可以使用文件系统微筛选器驱动程序来完成,该驱动程序在内核空间中安静运行,并且可以拦截特定文件路径中的所有 IRP 数据包(例如 C:''Sub*)。这样的程序可以使用fltmc.exe命令加载。