根据文件在 C# 中的修改时间读取文件
本文关键字:文件 修改 时间 读取 | 更新日期: 2023-09-27 18:32:51
我这里有一个情况。我想根据上次修改时间的创建来读取文件。最初我使用 FileSystemWatcher,以便在新文件出现时收到通知,但后来我意识到,如果运行我的软件的系统出现故障或重新启动,删除文件的位置仍将继续。
为了便于理解,我将举一个例子:
系统 A - 文件服务器(在此服务器上的目录中每 2 分钟创建一次文件)系统 B - 我的软件将运行并监控系统 A 路径中的文件
如果系统 B 重新启动并在 10 分钟后再次启动,则 FileSystemWatcher 将跳过在这 10 分钟内生成的所有这些文件。
如何确保在这 10 分钟内生成的文件也被捕获?
如果我的问题仍然无法理解,请告诉我。
如果你不想把它分成两个系统,你必须保留一点信息。每次在文件系统观察器上触发新事件时,都可以将当前时间戳存储在文件中。每次服务启动时,您都可以从文件系统中读取比上次时间戳更新的所有文件。这样您就不会错过文件。
我会将此应用程序分为两部分,并运行一个文件系统观察者-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
}
}
我知道这些文件是"生成"的,因此它们已被创建或修改。如果它们只是从一个文件夹移动到另一个文件夹,这将不起作用。在这种情况下,最好的方法是写入该列表中文件的快照(并将其写入某种保存文件),并在再次运行时进行比较。