Почему в Ada мои попытки открыть файл для записи не увенчались успехом?
Вопрос
Когда я пытаюсь открыть файл для записи, я получаю ошибку Ada.IO_Exceptions.Name_Error.
Имя файла — «C:\CC_TEST_LOG.TXT».Этот файл не существует.
Это в Windows XP на разделе NTFS.Пользователь имеет разрешения на создание и запись в каталог.Имя файла значительно меньше максимальной длины пути WIN32.
name_2 : String := "C:\CC_TEST_LOG.TXT"
if name_2'last > name_2'first then
begin
Ada.Text_IO.Create(file, Ada.Text_IO.Out_File, name_2);
Ada.Text_IO.Put_Line(
"CC_Test_Utils: LogFile: ERROR: Open, File "
& name_2);
return;
exception
when The_Error : others =>
Ada.Text_IO.Put_Line(
"CC_Test_Utils: LogFile: ERROR: Open Failed; "
& Ada.Exceptions.Exception_Name(The_Error)
& ", File " & name_2);
end;
end if;
Решение
С верхней части моей головы:
- В то время
Create
называется,file
еще не связан с другим открытым файлом, не так ли? - Какой компилятор вы используете?Gnat основан на mingw, и ему может не понравиться обозначение Windows «C:».Попробуйте вынуть эту часть и посмотреть, создаст ли она файл (где-нибудь).
- Как упомянул Ксанди, файл может быть уже открыт другой программой.Что
Create
вызов требует монопольного доступа к файлу.
Кстати, какой смысл в этом Put_Line сразу после Create
?Является успешно открытие файла тоже ошибка по какой-то причине?Похоже, что это может вводить в заблуждение, заставляя думать, что программе не удалось открыть файл, хотя на самом деле это удалось.
Не связан с StackOverflow