根据文件在 C# 中的修改时间读取文件

本文关键字:文件 修改 时间 读取 | 更新日期: 2023-09-27 18:32:51

我这里有一个情况。我想根据上次修改时间的创建来读取文件。最初我使用 FileSystemWatcher,以便在新文件出现时收到通知,但后来我意识到,如果运行我的软件的系统出现故障或重新启动,删除文件的位置仍将继续。

为了便于理解,我将举一个例子:

系统 A - 文件服务器(在此服务器上的目录中每 2 分钟创建一次文件)系统 B - 我的软件将运行并监控系统 A 路径中的文件

如果系统 B 重新启动并在 10 分钟后再次启动,则 FileSystemWatcher 将跳过在这 10 分钟内生成的所有这些文件。

如何确保在这 10 分钟内生成的文件也被捕获?

如果我的问题仍然无法理解,请告诉我。

根据文件在 C# 中的修改时间读取文件

如果你不想把它分成两个系统,你必须保留一点信息。每次在文件系统观察器上触发新事件时,都可以将当前时间戳存储在文件中。每次服务启动时,您都可以从文件系统中读取比上次时间戳更新的所有文件。这样您就不会错过文件。

我会将此应用程序分为两部分,并运行一个文件系统观察者-wcf 服务,该服务缓冲在这 10 分钟内创建的文件,并在重新启动时将其发送到系统 b。我看不到其他方式,对不起。

我认为文件系统观察器必须将有关文件系统的信息写入数据库(或其他类型的存储)。当系统 B 启动时,观察程序将当前文件系统与此信息进行比较,并将引发有关更改的事件。

从源计算机复制整个文件,并根据条件粘贴到目标位置。

字符串目录路径 = @"C:''A"; 字符串 DestinPath = @"C:''B";

        if (Directory.Exists(dirPath) && Directory.Exists(DestinPath))
        {
            DirectoryInfo di = new DirectoryInfo(dirPath);
            foreach (var file in di.GetFiles())
            {
                string destinFile = DestinPath + "''" + file.Name;
                if (File.Exists(destinFile))
                {
                    continue;
                }
                else
                    file.CopyTo(destinFile);
            }
        }

不确定我是否正确理解了您的问题,但根据我得到的内容并假设两个系统在时间方面是同步的,例如,如果您想获取十分钟前修改的文件:

        DateTime tenMinutesAgo = DateTime.Now.AddMinutes(-10);
        string[] systemAFiles = System.IO.Directory.GetFiles(systemAPath);
        foreach (string files in systemAFiles)
        {
            DateTime lastWriteTime = System.IO.File.GetLastWriteTime(files);
            if (lastWriteTime > tenMinutesAgo) //produced after ten minutes ago
            {
                //read file
            }
        }

我知道这些文件是"生成"的,因此它们已被创建或修改。如果它们只是从一个文件夹移动到另一个文件夹,这将不起作用。在这种情况下,最好的方法是写入该列表中文件的快照(并将其写入某种保存文件),并在再次运行时进行比较。