Процесс не может получить доступ к файлу, если запись в него происходит в цикле - 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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д