1
私はZipArchiveで作業しています。ほとんどの場合、私が見ている1つの問題は、ファイルをダウンロードしたときにWindowsのデフォルトアーカイブルーチンで開くことができないということです。 zipファイルをクリックしてすべてを抽出すると、抽出するエントリがないというエラーメッセージが表示されます。誰がなぜこれが起こっているのか知っていますか?それが価値があるのに対して、私は7zipで同じファイルを開き、ファイルをうまく抽出することができます。ZipArchiveが無効なZIPエントリを作成します
public virtual ActionResult GetZip()
{
var summary = GetBytes();
var response = new MemoryStream();
using (var stream = new MemoryStream())
{
using (var archive = new ZipArchive(stream, ZipArchiveMode.Create, true))
{
var entry = archive.CreateEntry("myfiletozip" + fileExt);
using (var writer = new BinaryWriter(entry.Open()))
{
writer.Write(summary, 0, summary.Length);
}
stream.Seek(0, SeekOrigin.Begin);
stream.CopyTo(response);
}
}
response.Seek(0, SeekOrigin.Begin);
return this.File(response, MediaTypeNames.Application.Zip, "myzipfilename.zip");
}
UPDATE:
このSO Answerを発見し、私のソースを修正し、それが働いている....と私はまだ理由を知りません。
byte[] response;
using (var stream = new MemoryStream())
{
using (var archive = new ZipArchive(stream, ZipArchiveMode.Create, true))
{
var entry = archive.CreateEntry("myfiletozip" + fileExt, CompressionLevel.Optimal);
using (var entryStream = entry.Open())
using (var fileToCompressStream = new MemoryStream(summary))
{
fileToCompressStream.CopyTo(entryStream);
}
}
response = stream.ToArray();
}
「this.File(...)」とは何ですか? – Dawnkeeper
私はこの問題は、明示的にentry.Open()を処理しなかったと考えています.Open()は2番目の例/更新では、別のエントリを使用してステートメントを追加した場合、これは正しい動作をしているようです。 –