1
저는 ZipArchive로 작업 중이며 주로 작동합니다. 파일을 다운로드 할 때 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()을 명시 적으로 처리하지 않았다고 믿습니다. 두 번째 예제/업데이트에 항목을 사용하여 다른 문을 추가하면이 동작이 올바른 동작을하는 것처럼 보입니다. –