gpt4 book ai didi

c# - 文件正在被另一个进程使用

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

我有一个大致执行此操作的程序:

  1. 打开一个文件并从中读取。
  2. 关闭文件
  3. 启动文件观察器以观察文件中的更改。
  4. 一旦检测到更改,filewatcher 的 EnableRaisingEvents 标志就会设置为 false,并且该过程从第 1 步开始重复。

问题是,从第 4 步到第 1 步后,它无法读取文件,说它正被另一个进程使用。

我收到的错误:

未处理的异常:System.IO.IOException:进程无法访问文件“c:\test.xml”,因为它正被另一个进程使用。

怎么了?我的程序第 1 步中的读取器是否仍然打开文件,或者是某个完全不同的进程访问该文件,还是 filewatcher 在从 4 移至第 1 步后仍在监视文件,尽管将标志设置为 false?

最佳答案

如果你的代码类似这样:

[STAThread]
static void Main(string[] args)
{
string file = "temp.txt";
ReadFile(file);
FileSystemWatcher fswatcher = new FileSystemWatcher(".\\");
fswatcher.Changed += delegate(object sender, FileSystemEventArgs e)
{
ReadFile(e.FullPath);
};
while (true)
{
fswatcher.WaitForChanged(WatcherChangeTypes.Changed);
}
}
private static void ReadFile(string file)
{
Stream stream = File.OpenRead(file);
StreamReader streamReader = new StreamReader(stream);
string str = streamReader.ReadToEnd();
MessageBox.Show(str);
streamReader.Close();
stream.Close();
}

如果您是通过记事本编辑文件,那么当您单击保存按钮时,文件会保持打开状态,而当您关闭程序并单击保存时它不会保持打开状态。我不知道这是记事本的错误还是未记录的功能,但这可能是您的问题。解决此问题的一种方法是执行以下操作:

在您的匿名委托(delegate)中,或者在您执行调用 ReadFile() 的任何地方调用 Thread.Sleep(1000),让程序在读取文件之前等待,并且您的代码应该可以正常工作。

关于c# - 文件正在被另一个进程使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737444/

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