Delphi - это весело
Да, я знаю, что он устарел, но Delphi был и остается очень интересным инструментом для разработки.
Согласно документации, существует (file_status s)
возвращает " status_known (s) && s.type ()! = File_not_found
".
В документации также указано, что :
Если базовая файловая система сообщает об ошибке во время определения атрибута [
file_status
]:
- Если ошибка, указывающая, что
p
не может быть разрешено, как будто из-за ошибок POSIXENOENT
[т.е. не найдено] ... returnfile_status (not_found_flag)
.
Мне кажется, что бросает исключение не является предполагаемым поведением. (когда вы создаете объект status
, его статус известен, и этот статус равен not_found
).
Однако в документации говорится:
[Примечание: эффект такого поведения заключается в различении между знанием того, что
p
не существует, и невозможностью определить статусp
. Это различие важно для пользователей. --end note]
Это означает, что библиотека действительно намеревается проводить различие между «файл не существует» и «Я не могу определить, что файл не существует». Вы можете связаться с авторами библиотеки для получения более четкого заявления.
Однако проверка на существование файла является условием гонки: файл мог существовать, когда ОС просматривала, но нет гарантии, что он продолжит свое существование. существует; аналогично, на момент поиска ОС этот файл мог не существовать, но нет гарантии, что он не будет существовать. Состояние гонки может иметь последствия для безопасности .
Вместо этого откройте файл и затем посмотрите, каковы его атрибуты. После открытия файла ОС дает определенные гарантии относительно того, что изменится, а что нет.
Это ошибка, вероятно, связанная с:
https://svn.boost.org/trac/boost/ticket/2725
Вы используете последняя версия Boost? Если да, сообщите об этом здесь. См .: