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);
後
あなたはそれから読み取るしようとする前に、メモリストリームの先頭に求めてみましたか? –
BinaryReader.ReadStringは、文字列の長さがストリームの文字列に特定のデータ形式で接頭されることを想定しています。この文字列長データが存在しない場合、このメソッドはストリーム内のバイトデータを誤って解釈し、面白い動作をします。 – elgonzo
メモリストリームには1つの位置しかありません(読み書きの両方があるUNIXと異なります)。したがって、メモリストリームに書き込むときは、ストリームの最後に位置が残っています。だからあなたが読む前に、その見出しをゼロに戻さなければなりません。 – jdweng