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-谢谢…我保持简单,只是更改了权限,所以文件不会被删除。