休眠直到文件存在/创建

Posted

技术标签:

【中文标题】休眠直到文件存在/创建【英文标题】:Sleep until file exists/created 【发布时间】:2014-10-09 19:03:01 【问题描述】:

我看过的参考 Is there a way to check if a file is in use? 和How to wait until File.Exists?

但我想避免使用 SystemWatcher,因为它似乎有点过头了。我的应用程序正在调用 cmd 提示符来创建文件,并且由于我的应用程序无法知道文件何时完成,所以只要文件不存在,我就在考虑使用 Sleep()。

string filename = @"PathToFile\file.exe";
int counter = 0;
while(!File.Exists(filename))

    System.Threading.Thread.Sleep(1000);
    if(++counter == 60000)
    
        Logger("Application timeout; app_boxed could not be created; try again");
        System.Environment.Exit(0);
    

不知何故,我的这段代码似乎不起作用。可能是什么原因?

【问题讨论】:

我保证 SystemWatcher 将使用比您想出的任何涉及 sleep 和 while 循环的方法更少的资源 这听起来像FileSystemWatcher确切目的。如果您编写的代码不起作用,而 FileSystemWatcher 确实起作用,那并不是真正“过度”的事情。 发生了什么? 似乎不起作用太模糊了。 那么你等了 60000 秒吗? 我也很困惑为什么你有一个计数器并且你每秒都在睡觉等待计数器达到 60000。你可以通过输入System.Threading.Thread.Sleep(60000000) 来消除所有这些。但是,我认为您想要的是System.Threading.Thread.Sleep(60000) 【参考方案1】:

不确定哪个部分不起作用。您是否意识到您的循环将运行 60,000 秒(16.67 小时)?你每秒递增一次,等待它达到 60000。

试试这样的:

const string filename = @"D:\Public\Temp\temp.txt";

// Set timeout to the time you want to quit (one minute from now)
var timeout = DateTime.Now.Add(TimeSpan.FromMinutes(1));

while (!File.Exists(filename))

    if (DateTime.Now > timeout)
    
        Logger("Application timeout; app_boxed could not be created; try again");
        Environment.Exit(0);
    

    Thread.Sleep(TimeSpan.FromSeconds(1));

【讨论】:

很好,我喜欢你的代码胜过我的。我在时间上犯了一个错误,并更正了代码的其他部分,所以它现在可以工作了。

以上是关于休眠直到文件存在/创建的主要内容,如果未能解决你的问题,请参考以下文章

休眠,检查对象是不是存在和空值

休眠表不存在错误

如果不存在,休眠忽略列[关闭]

让一个线程进入休眠状态,直到另一个线程解决了某个条件

如何为 mysqlcluster 创建休眠配置文件?

休眠命名查询