共享违规路径错误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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |