2017-08-10 244 views
2

打開的文件,我問過一些天前this問題中,人們告訴我使用TFileStream。我正在閱讀Głowacki的Expert Delphi,他使用TStreamReader/TStreamWriter。在評論中,我讀到:德爾福與流

TStreamReader是一個用於讀取文本數據的助手類。你的文件是 不是文本,它是二進制的。直接使用TFileStream代替

我對此有點麻煩。據我所知,一個binary文件不包含文本和TFileStream我可以讀取二進制文件(如文檔所述)。假設我想用TStreamWriter在文件上輸出一系列數字,然後讀取此文件的內容。我是否允許用TFileStream來做到這一點?

我看到TStreamWriter是在構造函數中TEncoding所以我需要指定UTF-8或ANSI例如。這會影響文件的結構嗎?

我的新本,我真的不明白專家主題,我在網上找到。從我瞭解TFileStream的是二進制文件,TStreamReader是具有內部

+0

對於二進制文件,您可以使用[TBinaryReader](http://docwiki.embarcadero.com/Libraries/en/System.Classes.TBinaryReader)和[TBinaryWriter](http://docwiki.embarcadero.com/Libraries/ en/System.Classes.TBinaryWriter)輔助類。 – Victoria

+0

@維多利亞謝謝:)事實是,我看到很多類可以用來讀取文件,我不知道如何選擇正確的一個 –

+0

這些類只是幫手。他們幫助你存儲和閱讀你想要的東西。例如[TStreamWriter](http://docwiki.embarcadero.com/Libraries/en/System.Classes.TStreamWriter)引用說明了它的用途_「用於字符串流的編寫器。」_如果您不想僅寫入字符,不要使用它。 [TBinaryWriter](http://docwiki.embarcadero.com/Libraries/en/System.Classes。TBinaryWriter)_「使用TBinaryWriter將原始數據類型作爲特定編碼中的二進制值寫入流中。」_因此,如果要編寫例如整數(甚至是字符串),它可以幫助你... – Victoria

回答

6

不是想迷惑你一些文本文件,但實際上所有的文件都是二進制。

它們包含的字節數,以及如何將這些字節由人類解釋或軟件,使它們非常有用。

但如果條件文本二進制都反對,然後文本手段(或多或少)任何是人類可讀的,像這樣的答案,而二進制意味着什麼,是不是文字。

一個例子:在當前的Delphi版本中,整數由四個字節組成。如果將這些字節直接存儲到文件中,那麼您正在編寫二進制文件。如果您將文本形式(例如-172423423)寫爲字符,則您正在編寫文本。

一個TextWriter到流寫入文本。當數據存儲在內存中時,數據將被寫入TBinaryWriter。兩者都可以使用任何類型的流,無論是TFileStream還是TMemoryStream都可以寫入(或讀取)。該流表示文件或其他可寫介質。

現在,文本可以有許多編碼,例如, UTF-8,幾個Ansi代碼頁等。這意味着不在#0..#127範圍內的「字符」編碼方式不同。這當然可以改變文件的確切內容。

+0

感謝魯迪我已經理解;)你沒有混淆我我已經瞭解到所有文件都是二進制文件。你的回答清除了我的想法 –