2013-01-20 150 views
2

是否可以使用1 assign()來讀寫文件?是否可以讀取和寫入文件只打開一次?

我的意思是這樣的:

assign(fl, 'file.txt'); 
reset(fl) 
// I know, that when I use reset - I have only read permission, 
// but is there any other option to read and write opening the file only once? 
read(fl, variable); 
write(fl, 'asdf); 
close(fl); 
+0

您的問題不明確,因爲您沒有描述FL的類型。如果是文本(文件),則不存在這種方式。 –

回答

4

Reset不給你只讀訪問;至少在Delphi的Pascal中,默認是讀/寫(FileMode = 2),FP與它很相容。

從幫助主題上FileMode重點煤礦):

表示類型化和復位的過程打開無類型文件的訪問模式。

在Delphi代碼中,FileMode確定使用Reset過程打開打字和非打字文件(不是文本文件)時要使用的訪問模式。

可以分配給FileMode變量的文件打開模式在System.SysUtils的常量列表中定義。 默認的FileMode是2(讀/寫訪問)。將另一個值分配給FileMode會導致所有後續復位使用該模式。

+0

請注意「NOT textfiles」。在例子中他使用writeln寫文本。而且filemode是共享行爲,因此不適用於使用相同句柄的讀/寫。 –

+0

@Marco:這很好,但沒有任何跡象表明(文件名除外)該文件是以「TextFile」打開的。 (缺少'f1'的聲明,這將決定它是哪種類型的文件,並且文本文件通常(但不總是)使用'WriteLn'和'ReadLn'寫入和讀取。)您可能是對的,但是。再次,很好的捕獲。 :-) –

+0

如果你非常無聊,我可以幫你找到一份FPC錯誤檢測器的工作:-)無論如何,重點是共享模式讀/寫和文件類型級讀/寫是兩回事 –

0

由於您的問題是一般性問題,您沒有說出將在文件中存儲什麼樣的數據。如果您將文件定義爲「TRecord文件」(您必須首先定義您的記錄類型),那麼首先您需要「重置」該文件以將其打開;之後,您可以使用預定義的過程'seek'在文件中查找特定記錄,將數據讀入TRecord類型的局部變量,更改該記錄並將其寫回文件。該文件的當前位置將是您剛剛閱讀的記錄的位置。

讀取和寫入文本文件更加棘手 - 存在預定義的過程「append」,它允許將文本添加到文件末尾(但不在中間)。

三十年前,我曾經使用這樣的系統來創建我自己的數據庫;幸運的是,現在數據庫編程要簡單得多。