Лекс Айрин писал(а):Как бы это тоже проверяется ДО передачи файла в функцию.
Опционально. Потому что это двойная проверка. Ведь WinAPI/libc её всё равно выполнит. И что интересно вы сделаете, если FileExists вернёт Flase? Выбросите точно такое же исключение?
Лекс Айрин писал(а):Зачем создавать файл в месте, в котором его нельзя создать?
А какой у вас стаж? Мне просто интересно, на сколько грабель вы наступили? Причин может быть чуть менее, чем миллион. Целевой путь был на сетевом диске - сеть отвалилась. Целевой путь был на отдельном диске - диск отказал. Проводили перенастройку сети - пропали права на доступ. Целевой каталог удалён. В целевом каталоге уже есть такой файл и он открыт с блокировкой другой программой. И т.д.
Лекс Айрин писал(а):И давать на все это несколько исключений это бессмыслица -- программа все равно падает.
Ну, ваша - да. А нормальные долгоиграющие в таких случаях обычно пишут в лог, отправляют тревожное письмо админу и продолжают работать дальше, аккуратно тыкая в проблему палочкой - не попустило ли.
Лекс Айрин писал(а):Вообще-то, непонятно как можно их "замести под ковер"?
Как-как...
- Код: Выделить всё
try
<...>
except
// По фиг
end;
Лекс Айрин писал(а):Просто поддерживай свою на уровне. Или слабо?
Вот теперь я уже не про стаж, а про возраст спрошу. И про то с какой самой большой программой вам приходилось иметь дело.
Лекс Айрин писал(а):Сервис, который работает нон-стопом должен писаться так, чтобы у него не было никаких левых исключений.
Спасибо за науку. Я сейчас пойду передам ядру системы чтобы никаких левых ошибок там не было. А то их rtl в исключения переводит.
Лекс Айрин писал(а):Файлы проверяются до открытия/записи/чтения, проверяется равенство на ноль и права заранее
"Не надо пытаться быть святее папы римского", "чинить то, что не сломано" и "изобретать велосипеды". Выше вы там писали, что исключения не бесплатны. Правда сейчас 2017 год, а не 1997. И у вас 4-гигагерцовый многоядерный монстр, а не Pentium 100. Но так все ваши дополнительные проверки стоят дороже. И знаете что? Они ничего не гарантируют. Мы в многозадачной среде. Пока вы на 1000% убедились, что есть файл, есть права, есть свободное место, ожил соседний процесс и снёс ваш файл и съел всё свободное место. И что теперь? Вот по этому эти проверки и выполняет операционная система. Потому что она сама решает эти вопросы. Если уж она открыла файл - значит открыла.
И самое интересно. Ну напишите вы все ваши проверки. Дальше что? Что вы напишете в ветку
else? Выброс такого же исключения? Halt? Кого-то на кол.
Лекс Айрин писал(а):если исключение произошло по вине программы, а не системы (аппаратуры), то это причина сервис переписать
Что такое вина программы? Соседний процесс открыл слишком много файлов (а в Windows их всего 16384 на сессию). Через пару минут его отпустит. Но вот прямо сейчас никто в этой сессии не может открыть ни одного файла. Что прикажете переписывать?
vitaly_l писал(а):И тут ВДРУГ в версии FPC 4.0 выясняется, что FPC - больше не разрешает такие финты
Вероятность стремиться к нулю. Во первых разрабы трясутся над обратной совместимостью. Баги порой править не хотят, чтобы текущие программы не отвалились. Во вторых, учитывая, что FPC медленно но верно ползёт за Delphi скорее в 4.0 появится ARC и код выродится до пустого вызова.
Не говоря уже о том, что в 3.2 record'ам завезут Initialize, Finalize, Copy, Addref и т.д.
Но пожалуй стоит закинуть ссылку на форумы FPC/Delphi. Будут пользователи - не сломают.
olegy123 писал(а):У вас сборщик мусора будет?
Нет, конечно. Зачем здесь GC? Это аналог Smart Pointer.