File io 在Ada中,为什么我试图打开一个文件进行写入却失败了?

File io 在Ada中,为什么我试图打开一个文件进行写入却失败了?,file-io,ada,File Io,Ada,当我试图打开要写入的文件时,会出现Ada.IO_Exceptions.Name_错误 文件名为“C:\CC\u TEST\u LOG.TXT”。此文件不存在 这是在NTFS分区上的Windows XP上。用户具有创建和写入目录的权限。 文件名远低于WIN32最大路径长度 name_2 : String := "C:\CC_TEST_LOG.TXT" if name_2'last > name_2'first then begin Ada.Text_IO.Creat

当我试图打开要写入的文件时,会出现Ada.IO_Exceptions.Name_错误

文件名为“C:\CC\u TEST\u LOG.TXT”。此文件不存在

这是在NTFS分区上的Windows XP上。用户具有创建和写入目录的权限。 文件名远低于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:\”指示符。试着把那个零件拿出来,看看它是否在某处创建了文件
  • 正如Xandy提到的,文件可能已经被另一个程序打开了。
    Create
    调用需要以独占方式访问该文件

另外,在
创建
之后的那条放线有什么意义?由于某种原因,成功打开文件也是一个错误吗?这似乎可能有误导性,让人认为程序在实际成功时未能打开该文件。

我能够用虚拟XP中发布的代码创建并打开(或覆盖)该文本文件。我唯一能想到的是,在您的情况下,该文件已经存在,而运行该代码的用户没有访问或修改该文件的正确权限。您的案例中引发的异常是哪一个?