Jim*_*ret 0 c# filesystemwatcher
我知道这是一个普遍的问题,但我只是打开它进行讨论。我必须假设其他人一定做过类似的事情,我不想做很多代码来找出我的解决方案不起作用。
这就是我所拥有的。用户将一个文件作为 OLE 对象添加到数据库中,并将某种态度与该文件相关联 - 它关联到的项目、版本等。我正在使用 Access - 客户选择不是我的!
当他们想要编辑它时,他们需要检查它。在这个阶段,我想监视文件并在他们保存文件时将其恢复到数据库中。
我认为文件系统观察程序是我最好的方法 - 监视更改并将其保存回数据库,甚至在触发更改时我可以获得对文件的访问权限。如果它仍然打开,应用程序会将它锁定,所以我知道用户还没有完成。
所以简而言之,我的问题是文件系统观察者是解决这个问题的正确方法吗?有人建议别的吗?
谢谢,吉姆
正如 M4GNV5 所说,FileSystemWatcher将为此工作,但这有点矫枉过正。在代码中使用一个非常复杂,因为它很容易出错,并且需要非常精确的使用模式才能成功。它也有一定的开销,因为它需要在内核模式下挂接到文件系统驱动程序。
另一种解决方案可能使用轮询。
FileInfo info = new FileInfo(filePath);
DateTime oldTime = info.LastWriteTimeUtc;
while(true)
{
do
{
await Task.Wait(1000);
info.Refresh();
} while(info.LastWriteTimeUtc == oldTime);
try
{
using(Stream s = File.OpenRead(filePath))
{
// ok, file was modified and is unlocked. copy back.
}
break;
}
catch(IOException)
{
// file is locked, retry.
oldTime = info.LastWriteTimeUtc;
}
}
Run Code Online (Sandbox Code Playgroud)
这首先等待文件的修改时间改变,然后检查它是否被解锁。