gpt4 book ai didi

c# - 如何等到 File.Exists?

转载 作者:可可西里 更新时间:2023-11-01 08:08:49 24 4
gpt4 key购买 nike

我有一个应用程序,用于监听选定文件夹中的 *.log 文件。我使用了 FileSystemWatcher

但是有个问题。负责制作该文件的其他应用程序执行以下步骤:

  1. 制作*.gz文件
  2. 将其解压为 txt 文件(一些随机文件名)
  3. 将 *.txt 名称更改为带有 *.log 扩展名的正确名称。

而且我无法改变这种行为。

所以我为 *.gz 和 *.txt 文件制作了 2 个 FileSystemWatcher。为什么?因为这个app有时不会解压gz文件,有时也不会把txt文件重命名为最终的*.log文件。

FileSystemWatcher2 捕获txt文件,然后(大多数情况下它被重命名为在接下来的1000ms登录)我需要等待一段时间来检查txt文件是否存在(如果不存在,似乎重命名为最终的 *.log 文件)。

问题是,如何在没有 Thread.Sleep() 的情况下检查文件是否存在以防止 UI 卡住?

我希望它是清楚的,如果不是我会尝试更好地描述它。我认为这是一个复杂的问题。

一些代码示例:

gz 文件的观察者:

private void fileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{
//this is for gz files in case if gz file is not unpacked automatically by other app
//I need to wait and check if gz was unpacked, if not, unpack it by myself,
//then txt watcher will catch that
Thread.Sleep(5000);
if (File.Exists(e.FullPath))
{
try
{
byte[] dataBuffer = new byte[4096];
using (System.IO.Stream fs = new FileStream(e.FullPath,
FileMode.Open,
FileAccess.Read))
{
using (GZipInputStream gzipStream = new GZipInputStream(fs))
{
string fnOut = Path.Combine(path_to_watcher,
Path.GetFileNameWithoutExtension(e.FullPath));

using (FileStream fsOut = File.Create(fnOut))
{
StreamUtils.Copy(gzipStream, fsOut, dataBuffer);
}
}
}
}
catch { //Ignore }
}
}

txt 文件的观察者:

private void fileSystemWatcher2_Created(object sender, FileSystemEventArgs e)
{
//this is for txt file
Thread.Sleep(3500);
if (File.Exists(e.FullPath))
{
//make my actions
}
else
{
//make my actions
}
}

最佳答案

实际上 FileSystemWatcher 创建的事件由 .NET 本身在单独的线程中调用.. 所以基本上您什么都不用做。您的代码没有问题。

证明如下:

class Program
{
static void Main(string[] args)
{
FileSystemWatcher fw = new FileSystemWatcher(@"C:\temp");
fw.Created += fileSystemWatcher_Created;

Console.WriteLine(Thread.CurrentThread.ManagedThreadId);

fw.EnableRaisingEvents = true;

Console.ReadLine();
}

static void fileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
}
}

关于c# - 如何等到 File.Exists?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14816425/

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