(我知道这是一个常见的问题,但我无法找到确切的答案)
我需要编写一个监视目录的Windows服务,并在文件到达时打开它,解析文本,对其执行某些操作并随后将其移动到另一个目录。我使用this post中提到的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
{
//???
}
}
}
答案 0 :(得分:1)
我认为您可以使用FileSystemWatcher
(有关此内容的更多信息:http://msdn.microsoft.com/it-it/library/system.io.filesystemwatcher(v=vs.110).aspx)。
具体而言,您可以挂钩OnChanged
事件,在提出之后,您可以检查IsFileLocked
以验证它是否仍然被写入。
此策略应避免您主动等待轮询。