2016-11-24 12 views
-1

ここでは何もわからないことがありますが、FileStreamでエンコードを設定できないようです。C#FileStream読み取りセットのエンコーディング

FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); 
      using (fs) 
      { 

       byte[] buffer = new byte[chunk]; 
       fs.Seek(chunk, SeekOrigin.Begin); 
       int bytesRead = fs.Read(buffer, 0, chunk); 
       while (bytesRead > 0) 
       { 
        ProcessChunk(buffer, bytesRead, database, id); 
        bytesRead = fs.Read(buffer, 0, chunk); 
       } 

      } 
      fs.Close(); 

ここで、ProcessChunkは読み取られた値をオブジェクトに保存し、オブジェクトをXMLにシリアライズしますが、読み取られた文字は正しく表示されません。エンコーディングは1250にする必要があります。エンコーディングをFileStreamに追加するオプションはありませんでした。私はここで何が欠けていますか?

+0

'' 'FileStream'''の代わりに' '' StreamWriter'''を使うようにしてください。 – tym32167

+1

あなたは* bytes *を読んでいるので、エンコーディングはありません。これらのバイトがテキストを構成する場合、エンコーダーを必要とするテキストにこれらのバイトを変換するプロセスです。あなたのコードや質問には(「どこでエンコーダを指定するか」以外の)テキスト処理の痕跡がないので、質問は:エンコーダが必要ですか? –

答えて

1

FileStreamではなく、StreamReaderを使用します。エンコーディングを指定できるようにするには、いくつかのconstructorsがあります。たとえば:

StreamReader srAsciiFromFile = new StreamReader(file, System.Text.Encoding.ASCII); 

私としても、それを書くことをお勧め:

using (StreamReader fs = new StreamReader ...etc) 

ではなく、使用して外で変数を宣言します。 the Dispose will handle thatのため、使用の外にCloseを行う必要はありません。

+0

Streamreaderを使用してチャンクサイズを指定するにはどうすればよいですか?ファイルの指定された開始点から開始し、一度に定義されたサイズのチャンクを読み込む必要があるので、FileStreamを使用します。 – Flopn

+0

StreamReaderに相当する「読み取り」メソッドがあります。https://msdn.microsoft.com/en-us/library/9kstw824(v=vs.110).aspx;エンコーディングが解決されたばかりだから、 "バイト"の代わりに "char"があります。 – Richardissimo

関連する問題