我目前编写的程序包含一个监视网络路径的FileSystemWatcher。
这些文件都是.txt' s。大多数文件介于200k和3 MB之间,因为如果文件直接保存到监视文件夹中我会收到错误,而不是被复制,我正在根据这个答案构建一个计时器:
FileSystemWatcher fires before file is saved - how do you "pause" the process?
现在有问题在房间里,我需要处理非常快的事件,所以我应该真的使用用户提到的1000毫秒还是更低的值?更具体一点:什么是我应该选择的最小值,一方面要快,另一方面还要保存?
也许我的问题有更好的解决方案?
€:我现在选择使用https://stackoverflow.com/a/3822355/3664953作为解决方案。由于我有可能一次处理几个文件,我选择在TPL中使用它。 我在事件中使用的代码:
private void OnCreate(object sender, FileSystemEventArgs e)
{
var fi = new FileInfo(e.FullPath);
Console.WriteLine(e.Name + " " + DateTime.Now);
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
DoWork(fi);
}
);
}
我使用的代码不会因为太快而遇到异常:
private void DoWork(FileInfo file)
{
var sw = new System.Diagnostics.Stopwatch();
sw.Start();
while(true)
{
if (IsFileLocked(file) == false)
{
break;
}
if(sw.ElapsedMilliseconds >= 30000)
{
_log.Status(Log.LL.Error, String.Format("Datei {0} ist gesperrt und kann nicht
importiert werden.", file.Name));
return;
}
}
...
在片刻,我遇到的唯一问题是,如果有100个文件被创建/复制,它会变得难以置信,这导致我的MSSQL稍后会返回超时。但这不是我必须处理的问题:)
Ty指出我正确的方向Neolisk。