C# · 12月 28, 2021

共享违规路径错误C#

这是我的代码: 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();

我想要做的只是打开一个带有log_x.txt名称的文件,并从file_no.txt文件中取出“x”.如果file_no.txt文件为空,则使日志文件的名称为log_1.txt,并将“fileNo 1”写入file_no.txt.A新程序启动后,新的日志文件名必须是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.txt和log_5.txt,下一个文件不会是log_6.txt,而不是log_2.txt.

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

可能性是无止境的:–D