嗯,您正在尝试打开该文件file_no.txt
用于阅读and用于使用单独的流进行写入。这可能不起作用,因为文件将被读取流锁定,因此无法创建写入流并且您会收到异常。
一种解决方案是先读取文件,关闭流,然后在增加后写入文件fileNo
。这样文件一次只打开一次。
另一种方法是创建一个用于读写访问的文件流,如下所示:
FileStream fileStream = new FileStream(@"file_no.txt",
FileMode.OpenOrCreate,
FileAccess.ReadWrite,
FileShare.None);
接受的答案这个问题 https://stackoverflow.com/questions/3817477/simultaneous-read-write-a-file-in-c-sharp似乎也有一个很好的解决方案,尽管我假设您不想允许共享读取。
可能的替代解决方案
我了解您希望在程序启动时创建唯一的日志文件。另一种方法是这样的:
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
and log_5.txt
,下一个文件不会是log_6.txt
but log_2.txt
.
为了克服这个问题,您可以使用 mask 枚举目录中的所有文件log_*.txt
并通过执行一些字符串操作找到最大的数字。
可能性是无限的:-D