我只是希望能够将某些文件的路径记录到文本文件中。 我有以下内容来进行日志记录。
static void LogFile(string lockedFilePath)
{
Assembly ass = Assembly.GetExecutingAssembly();
string workingFolder = System.IO.Path.GetDirectoryName(ass.Location);
string LogFile = System.IO.Path.Combine(workingFolder, "logFiles.txt");
if (!System.IO.File.Exists(LogFile))
{
using (System.IO.FileStream fs = System.IO.File.Create(LogFile))
{
using (System.IO.StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine(lockedFilePath);
}
}
}
else
{
using (System.IO.FileStream fs = System.IO.File.OpenWrite(LogFile))
{
using (System.IO.StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine(lockedFilePath);
}
}
}
}
但如果我在这样的控制台应用程序中调用它
foreach (string f in System.IO.Directory.GetFiles(@"C:\AASource"))
{
Console.WriteLine("Logging : " + f);
LogFile(f);
}
Console.ReadLine();
生成的文本文件中列出的唯一文件是目录中的最后一个文件。 我做错了什么?
答案 0 :(得分:5)
而不是System.IO.File.OpenWrite(LogFile)
,请使用System.IO.File.AppendText(LogFile)
。当你使用OpenWrite
时,你将用你写的任何内容覆盖内容。
此外,您的if
声明(if (!System.IO.File.Exists(LogFile))
)不是必需的。如果该文件不存在,AppendText
(和OpenWrite
)将创建该文件。这意味着您可以简单地在else
子句中运行代码。
答案 1 :(得分:0)
您需要以追加模式打开文件。否则,您删除之前文件中的所有内容。
Here's the logfile code I use如果你想看一些其他的例子。
答案 2 :(得分:0)
File.AppendText MSDN
答案 3 :(得分:0)
每次调用LogFile方法时都会覆盖文件。您可以使用StreamWriter的重载,允许附加到文件的末尾:
void LogFile(string lockedFilePath)
{
Assembly ass = Assembly.GetExecutingAssembly();
string workingFolder = System.IO.Path.GetDirectoryName(ass.Location);
string LogFile = System.IO.Path.Combine(workingFolder, "logFiles.txt");
using (System.IO.StreamWriter sw = new StreamWriter(LogFile, true))
{
sw.WriteLine(lockedFilePath);
}
}
答案 4 :(得分:0)
static void LogFile(string lockedFilePath)
{
Assembly ass = Assembly.GetExecutingAssembly();
string workingFolder = System.IO.Path.GetDirectoryName(ass.Location);
string LogFile = System.IO.Path.Combine(workingFolder, "logFiles.txt");
System.IO.File.AppendAllText(LogFile, System.Environment.NewLine + lockedFilePath);
}
答案 5 :(得分:-1)
您应该清除并关闭StreamWriter。如果只写了最后一个文件,那么你只需要覆盖你所拥有的文件。
见。