2010-03-10 55 views
1

當我嘗試打開要寫入的文件時,我得到一個Ada.IO_Exceptions.Name_Error。在Ada中,爲什麼我嘗試打開一個寫入失敗的文件?

文件名是「C:\ CC_TEST_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; 
+2

我可以使用虛擬化XP中發佈的代碼創建並打開(或覆蓋)該文本文件。我唯一能想到的是,在你的情況下,文件已經存在,運行該代碼的用戶沒有正確的權限來訪問或修改它。哪一個是你的情況中拋出的異常? – Xandy 2010-03-10 02:22:04

回答

1

關閉我的頭頂:

  • 當時Create被調用時,file尚未與另一個打開的文件關聯是什麼呢?
  • 你使用什麼編譯器? Gnat是基於mingw的,可能不喜歡windows的「C:\」標誌。嘗試把這部分拿出來,看看它是否創建文件(某處)。
  • 正如Xandy提到的那樣,該文件可能已經被另一個程序打開。 Create調用需要獨佔訪問該文件。

順便說一句,那是什麼PUT_LINE的Create右後點? 成功由於某種原因打開文件也出錯?它似乎可能會引起誤解,讓人認爲程序在成功時無法打開文件。

相關問題