Процесс не может получить доступ к файлу, если запись в него происходит в цикле - 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 нужно перебирать логи и искать самый последний, который нужно проверить на предельность размера и при возможности писать в него?
Листинг программы
  1. private static void LogWriter(string path, string message)
  2. {
  3. FileInfo file = new FileInfo(path);
  4. if (file.Length >= 15728640)//15 мегабайтов
  5. {
  6. var i = 1;
  7. while (file.Exists)
  8. {
  9. file = new FileInfo(path + i++);
  10. }
  11. file.Create();
  12. }
  13. StreamWriter txt = new StreamWriter(file.FullName,true);
  14. txt.WriteLine(DateTime.Now + " : "+message);
  15. Console.WriteLine(DateTime.Now +" : "+message);
  16. txt.Close();
  17. }

Решение задачи: «Процесс не может получить доступ к файлу, если запись в него происходит в цикле»

textual
Листинг программы
  1. private static void LogWriter(string path, string message)
  2.         {
  3.             FileInfo file = new FileInfo(path);
  4.             const int size = 15728640;
  5.  
  6.             if (file.Length >= size)//15 мегабайтов
  7.             {
  8.                 var i = 1;
  9.                 while (file.Exists && file.Length >= size)
  10.                 {
  11.                     file = new FileInfo(path + i++);
  12.                 }
  13.                 file.Create().Close();
  14.  
  15.             }
  16.             StreamWriter txt = new StreamWriter(file.FullName, true);
  17.             txt.WriteLine(DateTime.Now + " : " + message);
  18.             Console.WriteLine(DateTime.Now + " : " + message);
  19.             txt.Close();
  20.         }

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


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

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

12   голосов , оценка 3.833 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы