2010-11-18 4 views
10

SevenZipSharp를 사용하여 파일을 압축 파일로 압축합니다. 메모리 스트림에서 zip을 생성하는 방법이 있습니까? (이전에 파일을 메모리 스트림에로드하십시오.)SevenZipSharp - 메모리 스트림 압축

감사합니다. Maya.

답변

0

아쉽게도 SevenZipSharp는 7z 응용 프로그램을 둘러싼 COM 래퍼입니다. 따라서 쉬운 스트림 지원이 없습니다. 어쩌면 <SevenZipCompressor Instance>.CustomParameters.Add()을 통해 파일을 stdout으로 출력 할 수 있습니다.이 파일은 어쨌든 응용 프로그램에서 읽을 수 있습니다. 그러나 이것은 단지 추측이며 나는 이것이 작동하도록하는 방법에 대한 직접적인 조언이 없습니다.

13

스트림과 함께 SevenZipSharp를 사용하고 있으므로 문제가 없습니다.

SevenZip.SevenZipCompressor compressor = new SevenZip.SevenZipCompressor(); 
compressor.CompressionMethod = SevenZip.CompressionMethod.Lzma2; 
compressor.CompressionLevel = SevenZip.CompressionLevel.Normal; 
compressor.CompressStream(ms, compressedStream); 

마지막 줄에서 "ms"는 압축하려는 스트림으로, MemoryStream을 가정 해 봅니다. "compressedStream는"압축 해제에

... 또 다른 MemoryStream을 또는 FileStream 객체가 될 수 있습니다, 내가로 압축 할 스트림 경우 : SevenZipExtractor은 압축 해제 스트림 방법이없는

SevenZip.SevenZipExtractor extractor = new SevenZip.SevenZipExtractor(compressedStream); 
extractor.ExtractFile(0, decompressedStream); 

, 그래서 ExtractFile()을 대신 사용합니다.

매우 쉽습니다. 그리고 위의 코드 중 하나가 내가 가진 7zip과 DLL을 지정해야합니다 호출하기 전에 : 내 경우에는

SevenZip.SevenZipBase.SetLibraryPath(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\7-zip\\7z.dll"); 

을, 나는 내 응용 프로그램과 함께 7z.dll 번들하지 않는, 7zip과 기계에 별도로 설치 .

모두 매우 편리합니다. codeplex에서 SevenZipSharp - http://sevenzipsharp.codeplex.com/http://www.7-zip.org/의 7-zip을 다운로드했습니다.

+1

이것은 작동합니다. 예상대로 SevenZipExtractor.DecompressStream을 사용하면 오류가 발생합니다. – Kaganar

+0

나는 이것이 오래되었음을 알고 있지만 제대로로드/작동하려면 7z.dll 얻을 수없는 것. 로드/작동하도록 7za.dll을 얻을 수 있지만 .7z 만 지원하며 .zip 지원을 찾고 있습니다. 어디/7z.dll 얻을 "올바른"dll 무엇입니까? 감사! –

관련 문제