Помощь - Поиск - Пользователи - Календарь
Полная версия: Проблема в FPC при работе с файлами
Форум «Всё о Паскале» > Pascal, Object Pascal > 32 битные компиляторы
AlexSun
Код:
assign(f,fname);
{I-}
reset(f);
{I+}
if IOResult <> 0 then begin
rewrite(f);

Если файла нет, на строке с reset(f) программа вылетает с exitcode = 2.
Ошибка не в программе, со старыми исходниками дела так же.
Переустановка (после полного удаления ручками) ничего не дает.
Все нормально после удаления всех файлов fp.cfg, fp.dsk, fp.ini и чего-то еще похожего что там рядом лежит, но это не решает проблему - ведь исчезают все настройки, в том числе директории включаемых файлов (прощай библиотеки).

Что за ерунда??

Добавлено через 7 мин.
Виновата конфигурация.
Сношу конфиг файлы - все работает как надо.
Выложите кто свои 100% рабочие?
IUnknown
Вообще-то ТУТ дело явно в программе, у тебя не отключение/включение контроля ошибок ввода-вывода, а простые комментарии, и при включенном режиме Options ->Compiler -> Generated code -> IO Checking программа должна вылетать. А при удалении конфигов ты просто сбрасываешь этот ключ компилятора в дефолтное состояние (а дефолтное у него - "Отключено"), и просто замалчиваешь ошибку. Не надо искать проблем там, где их нет. Исправь программу ({$I-} и {$I+}) и все будет нормально.

Кстати: в папке, куда установлен FPC (т.е., в \fpc\bin\{target}) есть копия fp.cfg, всегда можно забрать ее оттуда.
AlexSun
Цитата(IUnknown @ 27.11.2011 1:33) *
Исправь программу ({$I-} и {$I+}) и все будет нормально.

Вот это я ступил ypriamii.gif
zixeroryrooca
Не знаю, как это получилось, но еще зависало когда печатал syst, хотя если напечатать sys, а через пробел utils, то после удаления пробела все нормально. Вообщем решилась проблема удалением файла fp.dsk.
TarasBer
А зачем вообще $I обратно на + ставить?
IUnknown
Затем, что это - дефолтное значение. Как говорится, "не будем нарушать отчетности" (С), было включено - выключили, сделали при выключенном состоянии то, что нужно, включили назад. Да и сам FPC так написан (и компилятор, и IDE, и все дополнительные утилиты).
TarasBer
А если программа изначально компилируется при {$I-}? То получается, что нарушаем как раз.
IUnknown
Цитата(TarasBer @ 13.01.2012 8:25) *
А если программа изначально компилируется при {$I-}
, то программист - ССЗБ. Я имел в виду:
Цитата(prog.pdf)
1.1.36 $I or $IOCHECKS : Input/Output checking
The {$I-} or {$IOCHECKS OFF} directive tells the compiler not to generate input/output check-
ing code in the program. By default, the compiler generates I/O checking code.


К тому же теперь, с возможностью отлова исключения EInOutError, этот ключ потерял первоначальный смысл, раньше без его отключения нельзя было обойтись, теперь - можно.
TarasBer
> то программист - ССЗБ

Ну и зря.
Я этот ключ отрубил раз и навсегда и при открытии файлов никаких плясок с директивами не делаю вообще.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.