Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Free Pascal, Pascal ABC и другие _ Проблема в FPC при работе с файлами

Автор: AlexSun 27.11.2011 5:11

Код:

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 27.11.2011 6:33

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

Кстати: в папке, куда установлен FPC (т.е., в \fpc\bin\{target}) есть копия fp.cfg, всегда можно забрать ее оттуда.

Автор: AlexSun 27.11.2011 17:52

Цитата(IUnknown @ 27.11.2011 1:33) *
Исправь программу ({$I-} и {$I+}) и все будет нормально.

Вот это я ступил ypriamii.gif

Автор: zixeroryrooca 11.01.2012 23:52

Не знаю, как это получилось, но еще зависало когда печатал syst, хотя если напечатать sys, а через пробел utils, то после удаления пробела все нормально. Вообщем решилась проблема удалением файла fp.dsk.

Автор: TarasBer 12.01.2012 13:41

А зачем вообще $I обратно на + ставить?

Автор: IUnknown 12.01.2012 23:45

Затем, что это - дефолтное значение. Как говорится, "не будем нарушать отчетности" (С), было включено - выключили, сделали при выключенном состоянии то, что нужно, включили назад. Да и сам FPC так написан (и компилятор, и IDE, и все дополнительные утилиты).

Автор: TarasBer 13.01.2012 13:25

А если программа изначально компилируется при {$I-}? То получается, что нарушаем как раз.

Автор: IUnknown 13.01.2012 15:33

Цитата(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 13.01.2012 15:35

> то программист - ССЗБ

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