C# 使用FileSystemWatcher监视文件创建,并在删除之前进行复制
我们有一个第三方应用程序,它将文件写入目录,然后将其删除。 我们想在删除之前复制该文件 我们有:C# 使用FileSystemWatcher监视文件创建,并在删除之前进行复制,c#,filesystemwatcher,C#,Filesystemwatcher,我们有一个第三方应用程序,它将文件写入目录,然后将其删除。 我们想在删除之前复制该文件 我们有: FileSystemWatcher watcher; private void WatchForFileDrop() { watcher = new FileSystemWatcher(); watcher.Path = "c:\\FileDrop"; watcher.NotifyFilter = NotifyFilters.
FileSystemWatcher watcher;
private void WatchForFileDrop()
{
watcher = new FileSystemWatcher();
watcher.Path = "c:\\FileDrop";
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName;
watcher.Filter = "*.txt";
watcher.Created += new FileSystemEventHandler(OnCreated);
watcher.EnableRaisingEvents = true;
}
private void OnCreated(object source, FileSystemEventArgs e)
{
//Copy the file to the file drop location
System.IO.File.Copy(e.FullPath, "C:\\FileDropCopy\\" + e.Name);
}
FileSystemWatcher确实可以工作。它将看到该文件已创建,并转到OnCreated()。该文件是在目录中创建的
唯一的问题是文件是空的,文件大小是0kb
我想再次检查我的想法,为什么文件是空的。是否因为文件被第三方应用程序删除得太快,以至于没有机会进行正确的复制?
感谢您的关注。选项1:
您不应该查看FileSystemWatcher,而应该查看钩住代码以删除事件。
您可以查看有关堆栈溢出的以下注释:
备选案文2:
一旦您的FileSystemWatcher意识到文件已创建,请更改该文件的权限,使其无法删除。如果您在创建文件时收到通知,没有关闭,则第三方应用程序可能尚未写入任何数据。您不能使用
FileSystemWatcher
来确保在写入和关闭文件后,但在删除文件之前,您有机会访问该文件。正确的临时文件是在关闭时不共享+删除的情况下打开的,因此,您可能需要更低级别的代码来拦截内容,因为正常的访问检查将阻止常规用户级别的代码访问文件。文件系统筛选器驱动程序是您的朋友。谢谢大家@Yogee-谢谢…我保持简单,只是更改了权限,所以文件不会被删除。