私はseven.zip.sharpを使用してストリームを圧縮しています。私はその後、圧縮が完了した後、メモリストリームのデータをファイルストリームに保存します。ファイルは ".7z"ファイルです。圧縮されたメモリストリームをファイルストリームに保存すると、エンドファイルが壊れています
問題:
出力ファイルが破損していると私はそれを手動で解凍することができません。 notepad ++を使用する私はまた、通常7zipファイルに見られるヘッダを見ることができません。ここで
はコードです:
//Memory stream used to store compressed stream
public System.IO.Stream TheStream = new System.IO.MemoryStream();
//Start compress stream
private void button1_Click(object sender, EventArgs e)
{
Thread newThread1 = new Thread(this.COMP_STREAM);
newThread1.Start();
}
//See size of stream on demand
private void button2_Click(object sender, EventArgs e)
{
textBox1.Clear();
textBox1.Text += "-" + TheStream.Length;
}
//To Create file
private void button3_Click(object sender, EventArgs e)
{
byte[] buffer = new byte[1024]; // Change this to whatever you need
using (System.IO.FileStream output = new FileStream(@"F:\Pasta desktop\sss\TESTEmiau.7z", FileMode.Create))
{
int readBytes = 0;
while ((readBytes = TheStream.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, readBytes);
}
output.Close();
}
MessageBox.Show("DONE");
}
//To compress stream
public void COMP_STREAM()
{
SevenZip.SevenZipCompressor.SetLibraryPath(@"C:\Program Files\7-Zip\7z.dll");
var stream = System.IO.File.OpenRead(@"F:\Pasta desktop\sss\lel.exe");
SevenZip.SevenZipCompressor compressor = new SevenZip.SevenZipCompressor();
compressor.CompressionMethod = SevenZip.CompressionMethod.Lzma2;
compressor.CompressionLevel = SevenZip.CompressionLevel.Ultra;
compressor.CompressStream(stream, TheStream); //I know i can just use a FileStream here but i am doing this from testing only.
MessageBox.Show("Done");
}
誰かがそれが良く見えるように質問を変更してください。もしあなたが望むなら、より良いタイトルを追加してください。ありがとうございました。
@Marko(どのように私が誰かにタグを付けていますか?) - (http://stackoverflow.com/questions/4214663/sevenzipsharp-compress-memory-stream) – meme
メモリストリームの位置をリセットする必要があると思います。あなたの出力は0バイトではありませんか? –
私はそう信じます。ストリーム "出力"を作成するので、最初は0バイトにする必要があります。 – meme