22

这是我的代码:

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”到file_no.txt。新程序启动后,新的日志文件名必须是log_2.txt。但我收到这个错误,我不明白我在做什么错。谢谢你的帮助。

4

4 回答 4

23

好吧,您正在尝试使用单独的流打开文件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.txtand log_5.txt,下一个文件不会是log_6.txtbut log_2.txt

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

可能性是无限的:-D

于 2012-07-18T12:26:52.117 回答
7

好吧,这可能很旧,但接受的答案对我不起作用。这是当您尝试读取或写入您刚刚从单独的流创建的文件时引起的。解决这个问题非常简单,只需将创建它时使用的文件流处理掉,然后您就可以自由访问该文件了。

if (!File.Exists(myfile))
{
    var fs = new FileStream(fav, FileMode.Create);
    fs.Dispose();
    string text = File.ReadAllText(myfile);
}
于 2017-08-19T04:58:22.093 回答
2

在此处输入图像描述

         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,问题得到解决。

于 2018-05-17T08:27:14.183 回答
1

None of the proposed options helped me. But I found a solution: In my case, the problem was with Anti-Virus, with intensive writing to a file, Anti-Virus started scanning the file and at that moment there was a problem with writing to the file.

于 2021-01-22T18:36:35.027 回答