gpt4 book ai didi

c# - IO 异常 - 另一个进程正在使用文件(创建目录后无法打开文件)

转载 作者:行者123 更新时间:2023-11-30 16:53:53 25 4
gpt4 key购买 nike

我有一个正在进行的项目,可以在病人接受手术时为 vert 监测病人,并将结果写入文本文件。当我尝试输出时,我只是让文件保存在 Debug 文件夹中,效果很好。但是,我现在创建了一个完整的目录,用于创建或打开一个主文件夹,然后是一个子文件夹(基于程序的输入文本),用于将文本文件保存到其中。

    private void createDirectory()
{ //create output file in this folder using owner name and current date

//main folder path (contains all files output from system)
string rootDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\Horse Monitoring Records";
//sub folder path (each patient has individual subfolder)
string subDirectory = rootDirectory + "\\" + txtPatName.Text + "-" + txtOwnerName.Text;
//file name (patient has file created for each operation)
fileName = subDirectory + "\\" + txtOwnerName.Text + "-" + DateTime.Now.Date.ToString("ddMMyyyy") + ".txt";

if (!Directory.Exists(rootDirectory)) //if main folder does not exist...
{
Directory.CreateDirectory(rootDirectory); //create it in My Documents
}
if (!Directory.Exists(subDirectory)) //if patient sub folder does not exist...
{
Directory.CreateDirectory(subDirectory); //create it in Patient-Owner format
}
if (!File.Exists(fileName)) //if monitoring file does not exist...
{
File.Create(fileName); //create it in Owner-Date format
}
}

这个阶段工作正常,但是一旦您尝试将一些数据保存到文本文件中,它就会抛出一个运行时错误,指出

The file cannot be accessed because it is being used by another process.

异常在这里提出:

    private void saveFileDetails()
{
//Once case details have been entered, create new file using these details and add data input structure
StreamWriter consoleFile = new StreamWriter(fileName);
...
}

当我去查看文件夹时,相关的子文件夹和文件已经创建,但文本文件是空白的。我猜这与创建目录后关闭文本文件有关,这意味着当系统尝试打开它时它已经打开了。不过,我不知道如何解决这个问题!

上面显示的两个函数是这样调用的:

    private void btnStart_Click(object sender, EventArgs e)
{
...

//file details entered upon load written to new file - according to PatID
createDirectory();
saveFileDetails();
}

任何关于从这里去哪里的建议都将不胜感激!

谢谢,标记

最佳答案

这里的问题是你做

if (!File.Exists(fileName)) //if monitoring file does not exist...
{
File.Create(fileName); //create it in Owner-Date format
}

就在您尝试写入文件之前。因为您刚刚创建了它(如果它不存在),操作系统可能尚未释放该文件。

就像评论中提到的@Jauch 一样,您可以完全跳过此检查并使用 StreamWriter 重载,如果文件不存在则创建文件,如果文件存在则附加到文件。

private void saveFileDetails()
{
//Once case details have been entered, create new file using these details and add data input structure
using (StreamWriter consoleFile = new StreamWriter(fileName, true))
{
// ...
}
}

或者,您可以使用以下方法一次编写所有文本:

File.AppendAllText(textToWrite, fileName);

关于c# - IO 异常 - 另一个进程正在使用文件(创建目录后无法打开文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30977929/

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