Должен повысить:: файловая система:: существует действительно выдают исключение для съемного устройства хранения данных без медиа?

Delphi - это весело

Да, я знаю, что он устарел, но Delphi был и остается очень интересным инструментом для разработки.

7
задан Larry Gritz 4 November 2009 в 17:33
поделиться

2 ответа

Согласно документации, существует (file_status s) возвращает " status_known (s) && s.type ()! = File_not_found ".

В документации также указано, что :

Если базовая файловая система сообщает об ошибке во время определения атрибута [ file_status ]:

  • Если ошибка, указывающая, что p не может быть разрешено, как будто из-за ошибок POSIX ENOENT [т.е. не найдено] ... return file_status (not_found_flag) .

Мне кажется, что бросает исключение не является предполагаемым поведением. (когда вы создаете объект status , его статус известен, и этот статус равен not_found ).

Однако в документации говорится:

[Примечание: эффект такого поведения заключается в различении между знанием того, что p не существует, и невозможностью определить статус p . Это различие важно для пользователей. --end note]

Это означает, что библиотека действительно намеревается проводить различие между «файл не существует» и «Я не могу определить, что файл не существует». Вы можете связаться с авторами библиотеки для получения более четкого заявления.

Однако проверка на существование файла является условием гонки: файл мог существовать, когда ОС просматривала, но нет гарантии, что он продолжит свое существование. существует; аналогично, на момент поиска ОС этот файл мог не существовать, но нет гарантии, что он не будет существовать. Состояние гонки может иметь последствия для безопасности .

Вместо этого откройте файл и затем посмотрите, каковы его атрибуты. После открытия файла ОС дает определенные гарантии относительно того, что изменится, а что нет.

5
ответ дан 7 December 2019 в 07:49
поделиться

Это ошибка, вероятно, связанная с:

https://svn.boost.org/trac/boost/ticket/2725

Вы используете последняя версия Boost? Если да, сообщите об этом здесь. См .:

http://www.boost.org/support/bugs.html

2
ответ дан 7 December 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: