Почему в Ada мои попытки открыть файл для записи не увенчались успехом?

StackOverflow https://stackoverflow.com/questions/2413549

  •  19-09-2019
  •  | 
  •  

Вопрос

Когда я пытаюсь открыть файл для записи, я получаю ошибку 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?Является успешно открытие файла тоже ошибка по какой-то причине?Похоже, что это может вводить в заблуждение, заставляя думать, что программе не удалось открыть файл, хотя на самом деле это удалось.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top