2012-04-25 17 views
0

我希望能夠在同一個實例中或通過相同的文件句柄讀取和寫入文件。我的意思是這個。假設你打開一個文件如下。Delphi Prism中的BinaryReader和BinaryWriter文件句柄

BinaryReader jfile := new BinaryReader(File.OpenRead('c:\jokes.dat')); 

我希望能也寫入到文件,而無需關閉jfile手柄,然後調用的BinaryWriter能夠寫入文件。你能做到嗎?另外,一旦打開要寫入的文件,舊文件中具有相同名稱的任何數據都將被完全擦除。真的嗎?

我知道你可以這樣做的Win32作爲Follows而不必重新分配f文件句柄。

Assignfile(f,fname); 
Reset(f,1); 
BlockRead(f,jokeA,SizeOf(jokeA)); 

Reset(f,1); 
BlockWrite(f,jokeB,SizeOf(jokeB)); 
CloseFile(f); 
+0

這是[二進制讀寫器在同一時間打開(重複http://stackoverflow.com/questions/8652045/binary-reader-and-writer-open除了一個有C#標籤,而你的.net和delphi-prism之外。也許它會有所幫助。 – 2012-04-25 17:20:56

+0

@KenWhite謝謝,我沒有看到這個問題 – ThN 2012-04-25 19:10:45

回答

1

,您可以:

using lFile := File.Open('c:\jokes.dat', FileMode.ReadWrite) do begin 
    var lReader := new BinaryReader(lFile); 
    // read using reader 

    lFile.Position := lFile.Length; 
    var lWriter := new BinaryWriter(lFile); 
    lWriter.Write... 

end; 
1

FWIW,我不認爲你可以用Binary *類來做到這一點。不過,您可以使用FileStream類。另外,FWIW,經典的Pascal/Delphi Reset(File)命令實際上會打開一個新的句柄 - 它只是重用的文件變量(實質上是文件名)。