Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 扫描目录中过去24小时的更改的控制台应用程序(已关闭)_C#_Logging_Filesystems - Fatal编程技术网

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

C# 扫描目录中过去24小时的更改的控制台应用程序(已关闭),c#,logging,filesystems,C#,Logging,Filesystems,我正在创建一个程序,在过去24小时内扫描给定目录中的所有文件及其所有子目录中的更改,而不是创建或删除。 我看过很多其他示例/教程,但并非所有示例/教程都符合我的要求 这是我目前的代码: using System.IO; public static void Main(string[] args) { string myDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocume

我正在创建一个程序,在过去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();
}
使用System.IO;
公共静态void Main(字符串[]args)
{
字符串myDirectory=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),@“C:\Path”);
var directory=newdirectoryinfo(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这是不可能的。两个文件都没有更改日志,也没有操作系统写入此类日志。您可以获得的唯一信息是上次写入时间。如果您需要整个日志,则应手动创建它(例如,使用
FileSystemWatcher
创建windows服务)或者您可以考虑使用一些跟踪文件的所有更改(在这种情况下,对文件的更改应该通过版本控制软件来完成)。

< P>没有<代码>文件SeistMeaveCurter < /C> >您必须有一个外部文件,用于比较差异。

所以在第一次跑步时你会得到

文件1
文件2
文件3

没有变化

下一次你可能会

文件1
文件3
文件4


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

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

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

我在VS 2010中测试了你的代码,在调试器中我看到变量文件中有多个条目。也许你在目录中只有一个修改过的文件,而在子目录中有其他更改过的文件(请参见下文)?也许你的输出是错误的? 如果目录中确实有多个最近更改的文件,我建议对中间结果使用一个附加变量来检查错误发生的位置。(directory.GetFiles()是否提供了不完整的文件列表,或者where中的过滤器是否有问题?)

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

还有他的所有子目录

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


希望这对您有所帮助

根据您的需要,这可能(据我所知)甚至不可能在.NET中干净地完成-您真正需要的是可以使用a来完成,它在内核空间中安静地运行,并且可以拦截特定文件路径中的所有内容(例如C:\Sub*)。这样的程序可以使用加载。

那么是否有可能获取多个文件的最后写入时间?因为我在该特定方向上尝试了一些方法,但仅获取了1个最后写入时间。不是多个。您只能获取每个文件的最后写入时间。单个日期时间值。不是文件修改时的日期列表。好吧太糟糕了。但是有可能让每个文件的最后一次写入都正确吗?我的意思是让每个文件都有自己的代码?我知道这是一种完美的方式,但这是可能的吗?@vascomakker抱歉,不要理解让每个文件都有自己的代码的意思。你可以得到目录中每个文件的最后一次写入时间。这就是你实际要做的ing now@lazyberezovsky当我调试代码时,它只给我所有文件夹中最近更改的文件。我只想知道你刚才说的:“目录中每个文件的上次写入时间”。它给我的只是最近更改的文件。但我知道不可能记录文件的每个最后写入日期?我的意思是像过去一样,而不是将来使用filesystemwatcher?