Текст в файл не добавляется - C # - PullRequest
2 голосов
/ 18 марта 2011

Я решил добавить механизм ведения журнала в свое приложение, чтобы я мог перехватывать любые ошибки или исключения.Я заметил, что когда создается запись в журнале, она не добавляется в журнал, она перезаписывает все, что находится в файле, поэтому есть только одна запись.

У меня такое ощущение, что эточто-то простое, чего мне не хватает, но я не очень часто использую пространство имен System.IO.

Создание / проверка файла журнала:

public static void SetWorkingDirectory(string path)
        {
            _workingDirectory = path + "\\ErrorLog.txt";

            if(!File.Exists(_workingDirectory))
            {
                File.Create(_workingDirectory);
            }
            pathSet = true;
        }

Добавление в журнал:

public static bool Add(string message)
        {
            StringBuilder str = new StringBuilder();
            str.Append(System.DateTime.Now);
            str.Append(" ");
            str.Append(message);
            str.Append(" \n");

            using (StreamWriter writer = new StreamWriter(_workingDirectory))
            {
                writer.Write(str.ToString());
            }
            return true;
        }

Сам журнал:

Log file

Ответы [ 5 ]

4 голосов
/ 18 марта 2011

Попробуйте использовать этот конструктор и передайте значение true для второго аргумента, чтобы открыть файл в режиме добавления.

...
using(writer = new StreamWriter(_workingDirectory, true))
...
3 голосов
/ 18 марта 2011

Просто используйте перегрузку StreamWriter, которая использует bool, чтобы определить, следует ли добавить.

using (var writer = new StreamWriter(_workingDirectory, true)
{
    ...
}
2 голосов
/ 18 марта 2011

Тот конструктор StreamWriter, который вы используете, перезаписывает файл. Существует перегрузка, которая добавится:

 using (StreamWriter writer = new StreamWriter(_workingDirectory, true))

Это все в документах .

Кроме того, если это не для обучения, используйте вместо этого одну из многих доступных сред ведения журналов. Ведение журнала может быть трудно получить право.

1 голос
/ 18 марта 2011

Как уже говорилось в driis, при ведении журнала лучше всего использовать одну из готовых каркасов ведения журнала, так как без особых усилий они смогут сделать это более эффективно и чище, чем вы.Мой фаворит в .NET - использовать предварительно упакованные утилиты трассировки System.Diagnostics , которые позволяют вам объявлять трассировщик (и) в конфигурации вашего приложения, а затем просто записывать их в свой код следующим образом:

Trace.Write("Test output ");

В качестве альтернативы вы можете использовать log4Net framework.

1 голос
/ 18 марта 2011

Многие часы программирования были потрачены на решение этой проблемы раньше. Я рекомендую вместо этого использовать пакет журналирования, такой как log4net, чтобы сэкономить время на отладке кода, который предназначен для того, чтобы дать вам инструмент для написания кода.

...