gpt4 book ai didi

c# - 检查文件是否正在使用,等待它完成

转载 作者:太空狗 更新时间:2023-10-30 00:03:29 25 4
gpt4 key购买 nike

我在我的应用程序中遇到了这个问题:

  • 第 1 步 - 创建一个文件 (xml) 并在其中放入一些内容
  • 第 2 步 - 第 3 方应用程序将打开文件并从第 1 步创建的文件中获取信息。
  • 第 3 步 - 再次删除文件。

我的第一个问题是关于这部分代码的:

XmlDocument xmlDoc = new XmlDocument();
DataSet ds = //use a method to put in the data
xmlDoc.LoadXml(ds.GetXml());
xmlDoc.Save("Filename");
// ...
Process.Start(startInfo);

我的假设是否正确,即最后一行仅在上述操作完成后才执行?所以我可以 100% 确定数据在它尝试正确启动之前都在 xml 中?

我现在遇到错误的第二部分在这里:

Process.Start(startInfo);
File.Delete("Filename");

现在发生的事情是,在第 3 方程序将其读入内存之前,该文件已被删除。

有什么方法可以检查文件是否不再使用,或者做一些稳定的等待方式?

我已经找到了使用 Thread.Sleep(TimeInMiliSec); 的方法,但我想这不是正确的方法(更像是一种变通解决方案)?

最佳答案

描述

您可以使用我示例中的方法并执行 while 循环。

示例

while (IsFileLocked(new FileInfo("YourFilePath")))
{
// do something, for example wait a second
Thread.Sleep(TimeSpan.FromSeconds(1));
}
// file is not locked

public static bool IsFileLocked(FileInfo file)
{
FileStream stream = null;

try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
return true;
}
finally
{
if (stream != null)
stream.Close();
}
return false;
}

关于c# - 检查文件是否正在使用,等待它完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9010806/

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