gpt4 book ai didi

c# - 读取和写入文件C#时共享冲突IOException

转载 作者:IT王子 更新时间:2023-10-29 04:43:47 24 4
gpt4 key购买 nike

这是我的代码:

public static TextWriter twLog = null;
private int fileNo = 1;
private string line = null;

TextReader tr = new StreamReader("file_no.txt");
TextWriter tw = new StreamWriter("file_no.txt");
line = tr.ReadLine();
if(line != null){
fileNo = int.Parse(line);
twLog = new StreamWriter("log_" + line + ".txt");
}else{
twLog = new StreamWriter("log_" + fileNo.toString() + ".txt");
}
System.IO.File.WriteAllText("file_no.txt",string.Empty);
tw.WriteLine((fileNo++).ToString());
tr.Close();
tw.Close();
twLog.Close();

它抛出这个错误:

IOException: Sharing violation on path C:\Users\Water Simulation\file_no.txt

我想做的只是打开一个名为 log_x.txt 的文件,然后从 file_no.txt 文件中取出“x”。如果 file_no.txt 文件为空,则创建日志文件的名称 log_1.txt 并写入“fileNo + 1"到 file_no.txt。新程序启动后,新的日志文件名必须是 log_2.txt。但是我收到这个错误,我不明白我做错了什么。谢谢你的帮助。

最佳答案

好吧,您正在尝试打开文件 file_no.txt 以使用单独的流进行读取 以进行写入。这可能行不通,因为文件将被读取流锁定,因此无法创建写入流,您会得到异常。

一种解决方案是先读取文件,关闭流,然后在增加fileNo 后写入文件。这样文件一次只能打开一次。

另一种方法是为读取和写入访问创建一个文件流:

FileStream fileStream = new FileStream(@"file_no.txt", 
FileMode.OpenOrCreate,
FileAccess.ReadWrite,
FileShare.None);

this question 的公认答案似乎也有一个很好的解决方案,即使我假设您不想允许共享读取。

可能的替代解决方案
我知道您想在程序启动时创建唯一的日志文件。另一种方法是这样的:

int logFileNo = 1;
string fileName = String.Format("log_{0}.txt", logFileNo);

while (File.Exists(fileName))
{
logFileNo++;
fileName = String.Format("log_{0}.txt", logFileNo);
}

这会增加数字,直到找到不存在日志文件的文件编号。缺点:如果您有 log_1.txtlog_5.txt,下一个文件将不是 log_6.txt,而是 log_2。文本文件

为了克服这个问题,您可以使用掩码 log_*.txt 枚举目录中的所有文件,并通过执行一些字符串操作找到最大的数字。

可能性是无限的:-D

关于c# - 读取和写入文件C#时共享冲突IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11541244/

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