此代码将创建" output.txt"在C:\ temp中,如果它还没有存在。但是,log.WriteLine();
并不适用于我。当我打开文件时,我看不到它。这是为什么?
private static string LogFile = @"C:\Temp\output.txt";
private StreamWriter log;
if (!File.Exists(@"" + LogFile))
{
log = new StreamWriter(@"" + LogFile);
}
else {
log = File.AppendText(@"" + LogFile);
}
log.WriteLine("["+DateTime.Now + "]: ");
答案 0 :(得分:4)
您需要关闭StreamWriter
。最好使用using
块,因为它可以保证StreamWriter
将被关闭,即使抛出异常也是如此。
using (var log = GetLog()){
log.WriteLine("["+DateTime.Now + "]: ");
}
...
public StreamWriter GetLog(){
if (!File.Exists(@"" + LogFile))
{
return new StreamWriter(@"" + LogFile);
}
else {
return File.AppendText(@"" + LogFile);
}
}
答案 1 :(得分:1)
对@John Saunders的代码进行了一点改进。
using (var log = GetLog())
{
log.WriteLine("["+DateTime.Now + "]: ");
}
...
public StreamWriter GetLog()
{
return new StreamWriter(LogFile, File.Exists(LogFile));
}
第二个参数StreamWriter
constructer用于确定append
操作。因此,如果文件存在附加,否则不会这样做。我认为这更整洁。实际上你甚至可以这样做:
using (var log = new StreamWriter(LogFile, true))
{
log.WriteLine("["+DateTime.Now + "]: ");
}
始终追加,如果文件不存在则创建它。
答案 2 :(得分:0)
如果您总是将相同的内容附加到文件中,无论它是否已存在,您都不需要条件。
如果文件不存在, File.AppendText
将创建该文件。
private static string LogFile = @"C:\Temp\output.txt";
using (StreamWriter sw = File.AppendText(LogFile))
{
sw.WriteLine("["+DateTime.Now + "]: ");
}
正如John Saunders所说,你需要处理流编写器,这将通过将其放入using语句来完成。