共享违规路径错误C#

前端之家收集整理的这篇文章主要介绍了共享违规路径错误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

原文链接:/csharp/93538.html

猜你在找的C#相关文章