题
当我尝试打开要写入的文件时,出现 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:\”指示符。尝试取出该部分并查看它是否创建该文件(某处)。
- 正如 Xandy 提到的,该文件可能已被另一个程序打开。那
Create
调用需要对该文件的独占访问权限。
顺便说一句,紧随其后的 Put_Line 的意义是什么 Create
?是 成功地 由于某种原因打开文件也出现错误?看起来它可能会产生误导,让人认为程序实际上成功打开了文件却失败了。
不隶属于 StackOverflow