2017-05-09 31 views
3

解凍せずにzipファイルからバイナリファイルを読みたいと思います。解凍せずにC#のzipファイルからバイナリファイルを読み込みます。

zipファイル構造:BinFileで

zipFolderName/subFolder/BinFile 

、私が持っている:

Id1, id2, value1 // id1, id2 are string, value1 is int 

C#の場合:

ZipEntry binFileName = …; // it has been got from zipFile entries 
MemoryStream ms = new MemoryStream(); 
binFileName.Extract(ms); 

using (BinaryReader reader = new BinaryReader(ms)) 
{ 
    string id1 = reader.ReadString(); // error popped here 
    string id2 = reader.ReadString(); 
    int value1 = reader.ReadInt32(); 
} 

私が得たエラー:を超えて読み取ることができません ストリームの終わり。 BinaryReaderがMemoryStreamを読み取れないようですか? binFileName.Extract(ms);

+0

あなたはそれから読み取るしようとする前に、メモリストリームの先頭に求めてみましたか? –

+0

BinaryReader.ReadStringは、文字列の長さがストリームの文字列に特定のデータ形式で接頭されることを想定しています。この文字列長データが存在しない場合、このメソッドはストリーム内のバイトデータを誤って解釈し、面白い動作をします。 – elgonzo

+0

メモリストリームには1つの位置しかありません(読み書きの両方があるUNIXと異なります)。したがって、メモリストリームに書き込むときは、ストリームの最後に位置が残っています。だからあなたが読む前に、その見出しをゼロに戻さなければなりません。 – jdweng

答えて

4

は、次のことを試してください。

ms.Seek(0, SeekOrigin.Begin);