2011-06-27 9 views
6

このテキストファイルには、さまざまなフィールドが含まれています。フィールドによってはバイナリデータが含まれている場合があります私はファイル内のすべてのデータを取得する必要がありますが、今すぐStreamReaderを使用すると、バイナリデータブロックとそれ以降のデータを読み取ることはありません。この問題を解決する最良の解決策は何でしょうか?StreamReaderとバイナリデータ

例:

field1|field2|some binary data here|field3 

は、今私はこのようなファイルを読み込む:

public static string _fileToBuffer(string Filename) 
{ 
    if (!File.Exists(Filename)) throw new ArgumentNullException(Filename, "Template file does not exist"); 

    StreamReader reader = new StreamReader(Filename, Encoding.Default, true); 
    string fileBuffer = reader.ReadToEnd(); 
    reader.Close(); 

    return fileBuffer; 
} 

は編集:私はバイナリフィールドの開始位置と終了位置を知っています。

答えて

7

StreamReaderは、バイナリデータのために設計されていません。 のテキストのデータ用に設計されているため、TextReaderに拡張されています。バイナリデータを読み取るには、Streamを使用し、結果を文字列(テキストデータの場合)に入れないようにしてください。

一般に、バイナリデータとテキストデータをこのようなファイルに混ぜることは悪い考えです。バイナリデータに|例えばシンボルですか?バイナリデータを、|を避けるbase64のようなテキストエンコードされた形式で含めることができます。

+0

私はデータソースを制御できないので、何とか対処しなければなりません。 – hs2d

+0

@ hs2d:バイナリデータに '|'のASCII表現(または何らかのエンコーディングが使われています)が含まれていると何が起こりますか?最初の2つのフィールドに、予想される長さを示すものはありますか? –

+0

予想される長さを教えてくれるものは何もありません。私の他の質問を見てください。私は1つのフィールドの最後をマークするフィールド区切りを取得するテンプレートを使用して:[リンク](http://stackoverflow.com/questions/6479505/c-template-parsing-and-matching-with-text-file) – hs2d

9

使用BinaryReader

+0

そしてBinaryWriterは、ファイルを適切なバイナリ形式で書き出します。 – Guillaume

+0

私はBinaryReaderを使用すると、ilはバイナリですべてのフィールドを取得するので、そこからバイナリデータではないフィールドを文字列として取得する必要がありますか? – hs2d

+0

@ hs2d StringBuilder + BinaryReader.ReadCharただし、ソースファイルを変更できる場合は、ReadStringを使用してください。 – Guillaume