2017-04-06 72 views
0

我有一个应用程序每隔5分钟读取一个文件。当程序启动时,它读取文件,一旦它完成,它启动一个计时器。只要5分钟过去,计时器就会停止并再次读取文件。检查文件是否已经及时修改在C#

我想检查文件是否在该时间段内被修改,如果不是,它不会读取文件。

目前,我有以下代码:

DateTime dtFile = File.GetLastWriteTime(file); 
DateTime now = DateTime.Now; 

long sub = (long)(now - dtFile).TotalMilliseconds; 

if(sub <= timer1.Interval) 
{ 
    // the code goes here 
} 

我的问题是,我的过程中有多个文件读取,则该过程可能需要几分钟。

因此,如果第一个文件在上午10:00完成执行,并且所有文件的处理在上午10:05结束,则定时器将在上午10:05开始。 所以计时器将在上午10点10分停止。

如果第一个读取的文件在上午10:02被修改,它将不会被读取,因为定时器在上午10:05在完整处理结束时开始运行。所以,上午10:02修改后的文件将会超出期限。

+5

每隔5分钟轮询文件的替代方法可能是使用[FileSystemWatcher](https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v = vs。 110).aspx)类。 – vyrp

+0

请不要认为你的观众在这里完全是男性,有时会对你的一些读者产生排斥效应。谢谢。 – halfer

回答

0

它只是一种方法来做到这一点,但我建议这样做。 创建包含以下属性的类: - 公共字符串,该文件路径 - 一个日期,保存最后检查时间 - 一个计时器对象

现在创建一个构造函数定义路径,开始时间并定义并启用计时器。

在应用程序启动时或每当您为每个文件立即安装一个对象时。每个物体现在都有一个独立的计时器,所以不会再干扰彼此。

+0

非常感谢您的帮助。我想从文件路径中创建一个包含字符串的类,并使用Datetime和上次修改的日期创建一个类。然后当通用计时器再次运行时,我会检查文件的最后修改是否与班级中的日期不同。它会起作用吗?该问题会为超过100个文件实例化类,因为它最终会对应用程序进行权衡。 –