写入文本文件时遗漏了某些内容

时间:2011-04-29 14:46:27

标签: c#

我只是希望能够将某些文件的路径记录到文本文件中。 我有以下内容来进行日志记录。

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();

生成的文本文件中列出的唯一文件是目录中的最后一个文件。 我做错了什么?

6 个答案:

答案 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。如果只写了最后一个文件,那么你只需要覆盖你所拥有的文件。

见。