检测到当前正在写入文件
本文关键字:文件 检测 | 更新日期: 2023-09-27 17:58:52
(我知道这是一个常见的问题,但我找不到确切的答案)
我需要编写一个windows服务来监视一个目录,并在文件到达时打开它,解析文本,对它做一些操作,然后将它移动到另一个目录。我使用了本文中提到的IsFileLocked方法来了解文件是否仍在编写中。我的问题是,我不知道另一方需要多少时间才能完成对文件的写入。我可以等几秒钟再打开文件,但这不是一个完美的解决方案,因为我不知道文件的写入速度,几秒钟可能不够。
这是我的代码:
while (true)
{
var d = new DirectoryInfo(path);
var files = d.GetFiles("*.txt").OrderBy(f => f);
foreach (var file in files)
{
if (!IsFileLocked(file))
{
//process file
}
else
{
//???
}
}
}
我认为您可能会使用FileSystemWatcher
(有关它的详细信息,请点击此处:http://msdn.microsoft.com/it-it/library/system.io.filesystemwatcher(v=vs.110).aspx)。
具体来说,您可以挂接到OnChanged
事件,在它引发之后,您可以检查IsFileLocked
以验证它是否仍在写入中。
此策略应避免您在轮询过程中主动等待。