gpt4 book ai didi

C# 异常 - 无法访问文件,因为它正被另一个进程使用

转载 作者:行者123 更新时间:2023-11-30 19:38:41 28 4
gpt4 key购买 nike

我有一个使用 2 种形式的 Windows 窗体应用程序,两种形式都写入单独的文件(通过在形式的文本框中包含字符串给出文件路径)。

对于 form1,我有许多函数可以在点击各种不同的按钮时将数据写入文件。在这种情况下,我使用 StreamWriter consoleFile = new StreamWriter(File.OpenWrite(fileName)); 方法第一次写入文件和 StreamWriter consoleFile = File.AppendText(fileName); 对于任何后续的。效果很好。

在为 Form2 实现相同功能时,主要区别在于所有文本都是一次写入的(一个函数包含四个子函数以尽量保持代码整洁)。我是这样处理的...

    public void writeChecklistToFile()
{
//open new file for writing
StreamWriter checklistFileStart = new StreamWriter(File.OpenWrite(getChecklistFile()));
checklistFileStart.WriteLine("Pre-Anaesthetic Checklist\n");

//sub-functions (one for each section of list)
//append tool used in separate functions
//StreamWriter checklistFile = File.AppendText(getChecklistFile());
writeAnimalDetails();
writeAnimalHistory();
writeAnimalExamination();
writeDrugsCheck();
}

然后每个子函数都包含上面显示的 appendText 变量:

    public void writeAnimalDetails()
{
StreamWriter checklistFile = File.AppendText(getChecklistFile());

//...
}

每当我单击调用主函数的按钮时,它都会在第一个 File.AppendText() 方法上引发异常。它指出无法访问目标文件,因为它已在另一个进程中使用。

大概这必须是 OpenWrite(),因为它之前没有在任何地方使用过,但我不明白为什么这个错误会出现在我的 form2 中,而它没有出现在 form1 中!

如果有人可以帮助我解决这个问题,或者可以指出更简单的方法,我将不胜感激。

谢谢

标记

最佳答案

将错误解读为“无法访问文件,因为[文件仍然打开供此]进程使用”。

问题是文件资源 - 来自 File.OpenWrite - 不是 Disposed正确并且一个带有独占锁的非托管文件句柄保持打开状态。当试图打开仍然打开的文件进行写入时,这又会导致异常。使用 the using statement帮助进行生命周期管理,as discussed here .

在这种特殊情况下,我建议提供 StreamWriter - 创建一次 - 作为需要写入它的函数的参数,然后在完成时最后处理一次整个打开的文件资源。这确保了更可见的资源生命周期并避免了多次打开-关闭操作。

public void writeChecklistToFile()
{
// Open file for writing once..
using (var checklistWriter = new StreamWriter(File.OpenWrite(getChecklistFile())))
{
// .. write everything to it, using the same Stream
checklistWriter.WriteLine("Pre-Anaesthetic Checklist\n");
writeAnimalDetails(checklistWriter);
writeAnimalHistory(checklistWriter);
writeAnimalExamination(checklistWriter);
writeDrugsCheck(checklistWriter);
}
// And the file is really closed here, thanks to using/Dispose
}

另见

关于C# 异常 - 无法访问文件,因为它正被另一个进程使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31760953/

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