[英]Sharing violation IOException while reading and writing to file 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();
它抛出这个错误:
IOException:路径 C:\Users\Water Simulation\file_no.txt 上的共享冲突
我想做的只是打开一个名称为 log_x.txt 的文件,然后从 file_no.txt 文件中取出“x”。如果 file_no.txt 文件为空,则创建日志文件的名称 log_1.txt 并写入“fileNo + 1” to file_no.txt.After a new program starts the new log file name must be log_2.txt.But I'm getting this error and I couldn't understand what I doing wrong.Thanks for help.
那么,您正在尝试打开文件file_no.txt
以使用不同的流进行读取和写入。 这可能不起作用,因为文件将被读取流锁定,因此无法创建写入流,您会得到异常。
一种解决方案是先读取文件,关闭流,然后在增加fileNo
后写入文件。 这样文件一次只能打开一次。
另一种方法是为读取和写入访问创建一个文件流,如下所示:
FileStream fileStream = new FileStream(@"file_no.txt",
FileMode.OpenOrCreate,
FileAccess.ReadWrite,
FileShare.None);
这个问题的公认答案似乎也有一个很好的解决方案,即使我假设您不想允许共享读取。
可能的替代解决方案
我知道您想在程序启动时创建唯一的日志文件。 这样做的另一种方法是:
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
。
为了克服这个问题,您可以使用掩码log_*.txt
枚举目录中的所有文件,并通过执行一些字符串操作找到最大的数字。
可能性是无限的:-D
好吧,这可能是旧的,但接受的答案对我不起作用。 这是在您尝试读取或写入刚从单独的流创建的文件时引起的。 解决这个问题非常简单,只需处理您创建它时使用的文件流,然后您就可以自由访问该文件了。
if (!File.Exists(myfile))
{
var fs = new FileStream(fav, FileMode.Create);
fs.Dispose();
string text = File.ReadAllText(myfile);
}
var stream = new System.IO.FileStream(filePath, System.IO.FileMode.Create);
resizedBitmap.Compress(Bitmap.CompressFormat.Png, 200, stream); //problem here
stream.Close();
return resizedBitmap;
在 Compress 方法中,我将质量参数的值传递为 200,遗憾的是它不允许 0-100 范围之外的值。
我将质量值改回 100,问题得到解决。
提议的选项都没有帮助我。 但我找到了解决方案:在我的案例中,问题出在反病毒软件上,大量写入文件,反病毒软件开始扫描文件,此时写入文件时出现问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.