你好,我需要非常大的二進制文件的工作,所以我不能使用的功能,諸如分派(),Closefile()等,我想用TFileStream的其閱讀()/Write()方法。但是我有問題,因爲我無法讀回我寫到流中的內容。我已經瞭解到問題與編碼有關,所以我認爲我需要使用Unicode而不是Ansi。但我還沒有明白如何去做。有人可以用例子幫助我嗎?我知道如何寫入/讀取/讀取文件,但這並不能幫助我解決問題。問題文件二進制/寫
回答
對不起,我的答案是錯的,就像安德烈亞斯說。也許這篇文章會幫助你? Writing a string to a TFileStream in Delphi 2010
-1。顯然你錯過了Q的第一句話:「我不能使用函數作爲Assign,Closefile等」。另外,您錯過了Q的標題:「... ** tfilestream **」。 – 2011-06-10 18:13:50
如果你同時控制書寫和閱讀,你可以使用讀者和作家。例如:
var
reader : TReader;
begin
reader := TReader.Create(MyStream, BufferSize);
try
myString : = reader.ReadString;
finally
reader.Free;
end;
end;
TReader有一種方法來區分unicode和ansistring,只要它們是由TWriter編寫的。
如果不控制好寫的一部分。你希望有一種方法來知道文件格式。 (至少是字符串和它們的大小)。所以,你可以準備一個緩衝區中讀取字符。
如果你想寫/自/至流中讀取字符串,最簡單的方式是投你的字符串作爲ShortString短這始終是255字符長(但意味着你的字符串不能超過255個字符)。如果您只需要在流中讀取/寫入字符串,請改爲使用TStringList。
否則,你有其他更復雜的選項:
- 寫入/讀取的TStringList到流(那麼你必須實現一種文件格式)
- 寫入字符串,並檢索它讀取字符通過字符和積累字符,直到遇到空字符,重複每個字符串的操作
-1用於暗示'ShortString':與它相關的太多限制可以用來解決這個問題。用於提示'TStringList'。因爲'TStringList'具有'SaveToStream'和'LoadFromStream'方法,更不用說'SaveToFile'和'LoadFromFile'了,所以'TStringList'爲'文件類型'。 -1用於暗示讀取和寫入按char逐字符流。 – 2011-06-10 18:46:42
關於文件格式:您可以將StringList保存到TMemoryStream,然後將MemoryStream.Memory寫入主流。我使用了很多:在主文件中,你寫流的大小,然後是stream.memory,這是爲了無限數量的流。解釋文件格式很簡單:閱讀即將到來的'streamsize',將下一個'streamsize'字節轉換爲某些東西,等等......關於ShortString:答案中提到了這種方法的侷限性。 – az01 2011-06-10 19:12:28
我不明白你爲什麼要在兩者之間使用內存流。爲什麼不直接將字符串列表保存到文件流? – jpfollenius 2011-06-10 22:17:21
- 1. 寫入二進制文件?
- 2. 寫入二進制文件
- 3. 寫二進制文件
- 4. 寫入二進制文件
- 5. 寫入二進制文件
- 6. 閱讀二進制文件問題
- 7. Android下載二進制文件問題
- 8. 二進制.dat文件問題
- 9. 閱讀二進制文件的問題
- 10. 上傳二進制文件問題
- 11. 解密二進制文件問題
- 12. 二進制文件加密問題
- 13. 二進制文件中的問題
- 14. 讀取二進制文件問題
- 15. 寫入/讀取二進制文件的uint問題
- 16. 寫入和讀取二進制文件時發生的問題
- 17. 將列表寫入二進制文件時的問題
- 18. 二進制文件寫入/讀取的問題
- 19. 在C#中編寫excel 2007二進制文件的問題
- 20. 二進制問題==
- 21. 編寫:: UndefinedConversionError編寫二進制文件
- 22. 寫的字符串二進制數據的二進制文件
- 23. 寫入二進制文件在C++
- 24. 在Ruby中寫入二進制文件
- 25. VB - 如何讀寫二進制文件?
- 26. 用matlab編寫multiprecision二進制文件
- 27. PHP編寫的二進制文件
- 28. 將位寫入二進制文件
- 29. 在TideSDK中寫入二進制文件
- 30. 在Delphi中編寫二進制文件
'TFileStream'原始數據(字節),而不是字符串,所以你的'Ansi'與'Unicode'問題是沒有意味着明顯或通常。你應該在你的問題中包含一些代碼。 – 2011-06-10 18:09:55
用'fmOpenReadWrite'或'fmCreate'打開'TFileStream',你可以閱讀也可以書寫。你也需要尋求。既然你沒有給出任何代碼,那麼很難說更多。 – 2011-06-10 19:11:32