我正在使用免費的pascal中的文件,我試圖打開一個文件,但如果它不存在,我就創建它。沒有明顯原因的運行時錯誤
這是我的代碼:
program messages;
const PATH_ = 'data/messages/';
type messageFields =
record
date : String
; viewed : Boolean
; text : String
; sender : String [ 8 ]
end
; messagesFile = file of messageFields
;
procedure openMessagesFile (var _file: messagesFile; _fileName: String; var error: Boolean);
begin
error := false;
assign (_file, PATH_+_fileName);
{$I-}
reset (_file);
{$I+}
if (ioResult <> 0) then
error := true;
end;
var _file: messagesFile
; fileName: String
; error: boolean;
begin
readln(filename);
openMessageFile(_file, filename, error);
if (error) then
rewrite(_file);
end.
的我第一次執行程序,因爲該文件不存在,把我一個例外。 第二次,工作正常!
這是例外:
An unhandled exception occurred at $00401759 :
EInOutError : Access denied
我認爲,如果OS返回的復位錯誤,而沒有打開,因此不應該不會關閉? –
你說得對。我知道我在這裏做了很多假設,但是我懷疑他只顯示了他原來的程序的一部分,如果我正確理解他,那麼在第一次執行時會創建該文件,儘管會引發異常。這讓我認爲,無論是什麼原因導致異常實際發生在重寫調用之後(在他的真實代碼中)。由於他的代碼在重寫後沒有關閉文件,所以他的真實代碼可能不會這樣做,他可能會嘗試做一些他在「重寫模式」中無法做到的事情。所以作爲第一步,我會確保他不會在某處丟失CloseFile。 –