gpt4 book ai didi

.net - Filewatcher 创建的事件

转载 作者:行者123 更新时间:2023-12-01 07:32:56 24 4
gpt4 key购买 nike

我正在使用 .net filewatcher 监视某个文件夹以获取某些类型的文件 (*.mbxml)。我正在使用 filewatcher 创建的事件。一旦创建的事件触发,我必须将此文件移动到另一个文件夹。这种方法的问题在于,一旦文件复制开始,就会触发 created 事件。因此,如果将文件复制到正在监视的文件夹的时间过长,则移动文件的代码将失败。我已经搜索过,我在网上找到的唯一解决方案是在 try-catch 块中移动文件并继续尝试,直到复制整个文件。我不喜欢这个解决方案,如果在整个文件完成复制或有一个单独的事件后触发 created 事件会更好。有没有另一种方法来实现这一目标?

最佳答案

您可以通过继承 FileSystemWatcher 并触发您自己的 FileReader 事件来简化您的代码,如下所示:

public class CustomFileSystemWatcher : System.IO.FileSystemWatcher
{
public CustomFileSystemWatcher()
{
this.Created += new FileSystemEventHandler(CustomFileSystemWatcher_Created);
}


private void CustomFileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{
ThreadPool.QueueUserWorkItem((n) => { WaitFileReady(e); });
}

private void WaitFileReady(FileSystemEventArgs e)
{
while (true)
{
try
{
using (FileStream fs = File.Open(e.FullPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
//exit
break;
}
}
catch (Exception)
{
//wait if you like
Thread.Sleep(100);
}
}
OnFileReady(e);
}

public event FileSystemEventHandler FileReady;

protected virtual void OnFileReady(FileSystemEventArgs e)
{
if (this.EnableRaisingEvents && FileReady != null) FileReady(this, e);
}
}

关于.net - Filewatcher 创建的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/278075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com