共享冲突IOException异常在读取和写入文件C#(Sharing violation IOEx

2019-06-26 09:14发布

这里是我的代码:

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:\用户\水模拟\ file_no.txt

我想要做的就是打开与log_x.txt名的文件,并从file_no.txt文件。如果file_no.txt文件以“X”是空的化妆日志文件的名称log_1.txt并写上“FILENO + 1”到file_no.txt.After一个新的程序启动新的日志文件名必须log_2.txt.But我得到这个错误,我不明白我在做什么wrong.Thanks寻求帮助。

Answer 1:

好吧,你试图打开该文件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.txtlog_5.txt ,下一个文件将不被log_6.txtlog_2.txt

为了克服这个问题,你可以列举所有的文件目录,掩码log_*.txt ,并通过执行一些字符串操作发现的最大数量。

可能性是无穷无尽的:-D



Answer 2:

嗯,这可能是旧的,但接受的答案并没有为我工作。 这是当你试图读或写你只是从一个单独的数据流中创建的文件引起的。 解决这个很简单,只需配置您创建它使用的文件流,然后你可以自由地访问文件。

if (!File.Exists(myfile))
{
    var fs = new FileStream(fav, FileMode.Create);
    fs.Dispose();
    string text = File.ReadAllText(myfile);
}


Answer 3:

在这里输入图像描述

         var stream = new System.IO.FileStream(filePath, System.IO.FileMode.Create);

        resizedBitmap.Compress(Bitmap.CompressFormat.Png, 200, stream); //problem here
        stream.Close();
        return resizedBitmap;

在该压缩方法中,我经过质量参数作为200,其可悲不允许范围0-100之外的值的值。

我quality的值改回100,问题得到了解决。



文章来源: Sharing violation IOException while reading and writing to file C#