2017-08-10 12 views
2

私はを使用するように言ったthisの質問に数日前に尋ねました。私は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/)を使用できます。 ja/System.Classes.TBinaryWriter)ヘルパークラス。 – Victoria

+0

@Victoriaありがとう:)実際には、ファイルを読むために使用できるクラスがたくさんあり、正しいものを選択する方法がわかりません。 –

+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のバージョンでは、の整数は4バイトで構成されています。これらのバイトをファイルに直接格納する場合、バイナリを書きます。テキストフォーム(例:-172423423)を文字として書き込むと、テキストが書き込まれます。

TextWriterはストリームにテキストを書き込みます。 TBinaryWriterは、メモリに格納されているデータを書き込みます。いずれのタイプのストリームも使用することができます(TFileStreamまたはTMemoryStream)。ストリームは、ファイルまたは他の書き込み可能媒体を表す。最近、テキストは多くのエンコーディングを持つことができます。 UTF-8、いくつかのAnsiコードページなどが含まれます。つまり、#0..#127の範囲にない「文字」は別々にエンコードされます。これは、もちろん、ファイルの正確な内容を変更することができます。

+0

ありがとうRudy私は理解しています;)あなたは私を混乱させませんでした。私はすべてのファイルがバイナリであると理解していました。あなたの答えは私の考えをクリアした –

関連する問題