C# 读取和写入文件C时共享冲突IOException#

C# 读取和写入文件C时共享冲突IOException#,c#,file-io,textreader,textwriter,C#,File Io,Textreader,Textwriter,这是我的密码: 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 =

这是我的密码:

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\u no.txt上的共享冲突


我要做的是打开一个名为log_x.txt的文件,并从file_no.txt文件中取“x”。如果file_no.txt文件为空,则将log file的名称改为log_1.txt并写入“fileNo+1”在新程序启动后,新的日志文件名必须是log_2.txt。但是我遇到了这个错误,我不明白我做错了什么。谢谢帮助。

好吧,您正在尝试打开文件
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

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


可能性是无穷的:-D

好吧,这可能很古老,但被接受的答案对我来说并不适用。这是在尝试读取或写入刚从单独流创建的文件时造成的。解决这个问题非常简单,只需处理创建过程中使用的文件流,然后就可以自由访问该文件

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

在Compress方法中,我将质量参数的值传递为200,遗憾的是,它不允许值超出范围0-100


我将“质量”的值改回100,问题得到了解决。

建议的选项对我都没有帮助。但我找到了一个解决办法:
在我的例子中,问题在于反病毒,在密集写入文件时,反病毒开始扫描文件,此时写入文件时出现问题。

当你说“获取此错误”时,说明实际错误将非常有用。“IOException:在路径C:\Users\Water Simulation\file_no.txt上共享冲突”这是错误..您肯定应该使用块来包装您的流。您的解决方案要好得多谢谢!我对C#上的IO了解不够。这将非常有用。请不要在此处发布代码/异常的图像。最好将它们作为文本包含。
         var stream = new System.IO.FileStream(filePath, System.IO.FileMode.Create);

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