Я хочу добавить простой регистратор в мое приложение. Для этой цели я хочу использовать StreamWriter
.
Код:
private StreamWriter OutputStream;
OutputStream = new StreamWriter(this.LogFilePath, true);
// .... message - log from app
DateTime now = DateTime.Now;
message = string.Format("[{0:yyyy-MM-dd H:mm:ss}] {1}", now, message
if (OutputStream != null)
{
OutputStream.WriteLine(message);
OutputStream.Flush();
}
В результате все строки правильно перехвачены и выходные данные верны, но иногда он может написать пустую строку с невидимыми символами в конце:
образец:
[1970-08-31 14:56:26] Command response -> !c:65:f9:1b:82:97
и если я проверю этот с помощью какого-либо инструмента, который может отображать невидимые символы , я могу видеть следующее:
В результате ~ 600 строк журнала - 125 МБ.
У меня найдено , что Причина может быть следующей:
Это происходит. Когда вы добавляете файл сначала, его размер корректируется в каталоге (и это транзакция в NTFS), а затем записываются фактические новые данные. Существует большая вероятность, что если вы закроете систему, то в итоге получите файл с большим количеством нулевых байтов, поскольку запись данных не является транзакционной, в отличие от записи метаданных (размер файла).
Абсолютного решения этой проблемы не существует.
Также пытался
проверять символы с помощью isControl
других подобных проверок;
пытался Trim
последние символы;
проверял документы - выглядит все правильно
Любой совет?