0x49D1

0L4g0YDQsNC30YDQsNCx0L7RgtC60LUsINC00LvRjyDRgNCw0LfRgNCw0LHQvtGC0YfQuNC60L7QsiA=

Snippets: Предзапись в файл при помощи C#


Странно, но часто спрашивают про то, как что-то записать в файл ДО того, что там уже записано.. Наверно все дело в том, что в .NET нет метода PrePend, а есть лишь Append и это вводит в заблуждение. Привожу кусочек кода для логирования исключения и записи его в файл в определенном стиле(обратный отсчет количества исключений с момента их первого появления)


private static string ErrorFileName = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
 + @"\LogManager.log";

 private static void WriteExceptionToLogFile(System.Exception ex)
 {
 int numberOfExceptions = 0;
 MemoryStream ms = new MemoryStream();

 if (File.Exists(ErrorFileName))
 {
 FileInfo f = new FileInfo(ErrorFileName);
 if (f.Length <= Settings.Default.MaxLogFileSize)
 {
 StreamReader sr = new StreamReader(ErrorFileName);
 numberOfExceptions = sr.ReadToEnd().Split(new string[1] { "-------------" }, StringSplitOptions.None).Length / 2;
 sr.Close();

 ms.Write(File.ReadAllBytes(ErrorFileName), 0, File.ReadAllBytes(ErrorFileName).Length);
 }
 }

 //---Create new file and write exception into it {---//
 StreamWriter sw = new StreamWriter(ErrorFileName);
 sw.Write(String.Format("-------------\n #{0} Entry date is: ", (numberOfExceptions + 1)));
 sw.WriteLine(DateTime.Now);
 sw.WriteLine(ex.ToString());
 sw.WriteLine(String.Format("InnerException:\n{0}", ex.InnerException));
 sw.WriteLine("-------------");
 sw.Close();
 //---Create new file and write exception into it }---//

 FileStream fs = new FileStream(ErrorFileName, FileMode.Append);
 fs.Write(ms.ToArray(), 0, ms.ToArray().Length);

 System.Diagnostics.Process.Start(ErrorFileName);
}

В конце метода запускается текстовый редактор и мы сразу видим последнее исключение + список прошлых чуть ниже.

Коротко:

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

MaxLogFileSize - Размер лог файла, больше которого он не должен расти, иначе просто перезаписываем его, чтоб не хранить очень уж много исторических неточностей =)
Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: