Проблема при доступе к файловой системе заключается в том, что свойство файла или каталога могло изменяться между временем, когда вы запрашиваете его, и временем, когда вы хотите его использовать (даже если это всего лишь небольшая доля секунды).Из-за этого утверждения в Eiffel вида:
f (a_file: RAW_FILE)
require
a_file.is_writable
do
a_file.open_write
могут быть нарушены.В библиотеках Gobo Eiffel вместо проверки возможности открытия файла в режиме записи перед фактическим открытием был выбран способ возврата: попробуйте открыть файл и проверить, успешно ли он был открыт.
f (a_pathname: STRING)
local
l_file: KL_TEXT_OUTPUT_FILE
do
create l_file.make (a_pathname)
l_file.recursive_open_write
if l_file.is_open_write then
-- Write to the file.
l_file.close
else
-- Report the problem.
end
Обратите внимание, что он использует recursive_open_write
, а не только open_write
, поэтому также создаются и отсутствующие каталоги в пути.