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