Процесс не может получить доступ к файлу, если запись в него происходит в цикле - C#
Формулировка задачи:
Если файл создается в цикле While, то при последующей попытке записи в него вылетает ошибка:
An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll
Additional information: Процесс не может получить доступ к файлу "F:\log\file.log1", так как этот файл используется другим процессом.
Как ее избежать?
И еще такой вопрос:
У меня в конфиге задано, что записать идет в log.log, но если он достигает 15 мегабайтов, то создается log.log1.
Так вот, загвоздка в том, что метод проверяет всегда log.log, а если уже был создал log.log1 и он еще не достиг предельных размеров, то будет создан log.log2...
Это мне в foreach нужно перебирать логи и искать самый последний, который нужно проверить на предельность размера и при возможности писать в него?
Листинг программы
- private static void LogWriter(string path, string message)
- {
- FileInfo file = new FileInfo(path);
- if (file.Length >= 15728640)//15 мегабайтов
- {
- var i = 1;
- while (file.Exists)
- {
- file = new FileInfo(path + i++);
- }
- file.Create();
- }
- StreamWriter txt = new StreamWriter(file.FullName,true);
- txt.WriteLine(DateTime.Now + " : "+message);
- Console.WriteLine(DateTime.Now +" : "+message);
- txt.Close();
- }
Решение задачи: «Процесс не может получить доступ к файлу, если запись в него происходит в цикле»
textual
Листинг программы
- private static void LogWriter(string path, string message)
- {
- FileInfo file = new FileInfo(path);
- const int size = 15728640;
- if (file.Length >= size)//15 мегабайтов
- {
- var i = 1;
- while (file.Exists && file.Length >= size)
- {
- file = new FileInfo(path + i++);
- }
- file.Create().Close();
- }
- StreamWriter txt = new StreamWriter(file.FullName, true);
- txt.WriteLine(DateTime.Now + " : " + message);
- Console.WriteLine(DateTime.Now + " : " + message);
- txt.Close();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д