Что означает Run-Time Error 123 ???

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
M@N
незнакомец
Сообщения: 5
Зарегистрирован: 17.08.2014 21:36:48

Что означает Run-Time Error 123 ???

Сообщение M@N »

На обработке следующих строк кода

Код: Выделить всё

var f:textfile;
...
begin
...
assign(f,'File.txt');
...
  {$I-}
  //Проверка существования файла (IOresult=0 если да).
  append(f);
  //Если существует, то записать данные через пустую строку, иначе создать и записать данные.
  if ioresult=0
    then writeln(f)
    else rewrite(f);
  Write_In_File;//Процедура записи в файл.
  closefile(f);
  MessageDlg('Данные сохранены в файл "File.txt"',mtInformation,[mbOk],0);
  {$I+}


Код: Выделить всё

procedure TForm1.Write_In_File;
begin
...
  writeln(f,UTF8toSys('Строка'));
...
end;


программа выдает эту ошибку на строке

Код: Выделить всё

writeln(f,UTF8toSys('Строка'));


Но до этого все было работоспособным.

:?: :!:

IDE : Lazarus 1.0.14
SSerge
энтузиаст
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Сообщение SSerge »

Внимательно читаем описание Runtime паскаля. Можно даже для почившего в бозе Borland Pascal :D
Если контроль операций ввода-вывода был выключен директивой $I-, и произошла ошибка ввода-вывода, до тех пор, пока значение переменной IORESULT не прочитано программой, все операции ввода-вывода находятся в неопределенном состоянии и будут приостановлены либо будут заканчиваться ошибкой.

Смотрим, где у вас заканчивается блок {$I-} {$I+}

И делаем так, чтобы IORESULT соответствовал единственной операции, которую вы контролируете.

И да, проверять существование файла через append - это нечто. Функции типа FileExists и прочий stat уже отменили, да?
M@N
незнакомец
Сообщения: 5
Зарегистрирован: 17.08.2014 21:36:48

Сообщение M@N »

Спасибо за помощь
Ответить