我正在尝试创建一个基本的日志记录系统,将每个类的调用记录到名为log.csv
的文件中。我有一个名为logPath
的字符串,其中包含..\\..\\log.csv
和另一个名为logData
的字符串,其中包含我要写入日志文件的信息。
到目前为止我的代码:
if (!File.Exists(logPath))
{
File.Create(logPath);
StreamWriter writeLog = new StreamWriter(logPath, true);
writeLog.WriteLine(logData);
writeLog.Close();
}
else if (File.Exists(logPath))
{
StreamWriter writeLog = new StreamWriter(logPath, true);
writeLog.WriteLine(logData);
writeLog.Close();
}
但是,当我运行代码并且日志文件不存在时,程序崩溃但仍然创建文件log.csv
,但logData
中的数据不会写入文件。当我再次运行程序时,因为该文件存在,所以编写该类的每个调用都没有问题。当程序在创建文件时崩溃时,它会抛出IOException
,声称该文件正由另一个进程使用。
答案 0 :(得分:2)
删除以下行(这会创建文件并使其保持打开状态,然后您尝试再次创建该文件并崩溃,因为它已创建且文件仍处于打开状态):
File.Create(logPath);
这就是为什么你收到的消息表明该文件正被另一个进程使用的事实,实际上它是由File.Create引起的你自己的进程
完整所需要的是用以下代码替换整个代码(如果文件不存在则创建文件)
using(var writeLog = new StreamWriter(logPath, true))
{
WriteLog.WriteLine(logData);
writeLog.Close();
}
答案 1 :(得分:1)
由于您正在追加并且StreamWriter已经创建了该文件(如果该文件不存在),您可以简化代码,如下所示:
using (StreamWriter writeLog = new StreamWriter(logPath, true))
{
writeLog.WriteLine(logData);
writeLog.Close();
}