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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы