Обработка ошибок - открыт ли файл.

Страницы: 1
RSS
Обработка ошибок - открыт ли файл., Обработка ошибок - открыт ли файл.
 
При попытке логгирования изредка появляется ошибка доступа к открытому текстовому файлу: attempt toi use closed file.
Как корректно обработать эту ошибку, чтобы она не приводила к остановке работы скрипта? Как проверить открыт ли файл или нет, перед попыткой записи?
 
Попробуй так
Код
Myfilefile = "\\MyData.txt";
   i = 0;
   while i == 0 do
      Myfile = io.open(getScriptPath()..Myfilefile,"r+");
-- Если файл занят      
      if Myfile == nil then 
         sleep(100);
      else
         i = 1;
      end;
   end;
 
Все гораздо проще.

достаточно посмотреть type(file_variable)
www.bot4sale.ru        t.me/bot4sale
 
Цитата
s_mike@rambler.ru написал:
Все гораздо проще.

достаточно посмотреть type(file_variable)
Что-то не получается.
Такой код

Flog = io.open(homefolder.."\\"..sLogFileName..".csv", "a+");
message (type(Flog))
Flog:close ();
message (type(Flog))

оба раза возвращает "userdata"
 
io.type (obj)

Проверяет, является ли obj валидным хендлером файла. Возвращает строку "file" если obj –
открытый хендлер файла, "closed file" если obj закрытый хендлер файла, или nil
если obj не является хендлером файла.
www.bot4sale.ru        t.me/bot4sale
 
Цитата
s_mike@rambler.ru написал:
io.type
Работает, спасибо!
 
Цитата
Игорь Б написал:
Myfilefile = "\\MyData.txt";
  i = 0;
  while i == 0 do
     Myfile = io.open(getScriptPath()..Myfilefile,"r+");
-- Если файл занят      
     if Myfile == nil then
        sleep(100);
     else
        i = 1;
     end;
  end;
у вас просто неправильно сделана реакция на       if Myfile == nil then
если  Myfile == nil  это означает что файл не открыт
т е вам надо проверять на ni и если не открыт  то
делать его открытие,
а не спать.
 
 
например нам так
if Log==nil then Log=io.open(pat..name..".log","w")  end -- открываем если файл не открыт для записи  
Страницы: 1
Читают тему (гостей: 1)
Наверх