Zip 아카이브에서 스트림을 집계하는 데 사용하는 함수가 있습니다.Zip 내의 Zip이 문서화되지 않은 System.IO.Compression.SubReadStream에 열립니다.
private void ExtractMiscellaneousFiles()
{
foreach (var miscellaneousFileName in _fileData.MiscellaneousFileNames)
{
var fileEntry = _archive.GetEntry(miscellaneousFileName);
if (fileEntry == null)
{
throw new ZipArchiveMissingFileException("Couldn't find " + miscellaneousFileName);
}
var stream = fileEntry.Open();
OtherFileStreams.Add(miscellaneousFileName, (DeflateStream) stream);
}
}
대부분의 경우에 잘 작동합니다.
System.InvalidCastException : 나는 지퍼 내 우편이있는 경우 그러나, 나는
DeflateStream
에 스트림을 주조상의 excpetion를 얻을 입력 유형 'System.IO.Compression.SubReadStream'의 개체를 캐스팅 할 수 없습니다 'System.IO.Compression.DeflateStream'.
SubReadStream
에 대한 Microsoft 설명서를 찾을 수 없습니다. 내 우편 번호는 DeflateStream
입니다. 이것이 가능한가? 그렇다면 어떻게?
여전히
성공하지 UPDATE. 나는 다음과 같은 코드를 사용하여 스트림을 복사 선샤인의 제안 @ 시도 :
private void ExtractMiscellaneousFiles()
{
_logger.Log("Extracting misc files...");
foreach (var miscellaneousFileName in _fileData.MiscellaneousFileNames)
{
_logger.Log($"Opening misc file stream for {miscellaneousFileName}");
var fileEntry = _archive.GetEntry(miscellaneousFileName);
if (fileEntry == null)
{
throw new ZipArchiveMissingFileException("Couldn't find " + miscellaneousFileName);
}
var openStream = fileEntry.Open();
var deflateStream = openStream;
if (!(deflateStream is DeflateStream))
{
var memoryStream = new MemoryStream();
deflateStream.CopyTo(memoryStream);
memoryStream.Position = 0;
deflateStream = new DeflateStream(memoryStream, CompressionLevel.NoCompression, true);
}
OtherFileStreams.Add(miscellaneousFileName, (DeflateStream)deflateStream);
}
}
그러나 나는
System.NotSupportedException을 얻을 : 스트림이 읽기를 지원하지 않습니다.
나는 deflateStream.CanRead
을 검사했다.
이 문제는 zip뿐만 아니라 압축되지 않은 파일 (예 : 너무 작기 때문에)에서도 발생합니다. 확실히 이것을 처리 할 방법이 있습니다. 분명히 누군가가 전에 이것을 경험했습니다. 나는이 질문에 현상금을 열어두고있다.
@Quantic 덕분에 SubReadStream
의 .NET source입니다.
'_archive'의 유형은 무엇입니까? – Quantic
'System.IO.Compression.ZipArchive'. 감사. –
.NET 코어 여야 함 : https://github.com/dotnet/corefx/blob/bffef76f6af208e2042a2f27bc081ee908bb390b/src/System.IO.Compression/src/System/IO/Compression/ZipCustomStreams.cs – Quantic