문제

Java 코드에서 읽을 수 있는 .Net에서 Zip 파일을 만들려고 합니다.

SharpZipLib을 사용하여 Zip 파일을 생성했지만 생성된 파일이 #ZipLib 라이브러리의 CheckZip 기능에 따라 유효하고 WinZip 또는 WinRar를 통해 성공적으로 압축을 풀 수 있는 경우 Java를 사용하여 압축을 풀려고 하면 항상 오류가 발생합니다. .Utils.Zip 클래스(Java).

문제는 SharpZipLib이 작성한 잘못된 헤더에 있는 것 같습니다. SharpDevelop 포럼에도 질문을 게시했지만 결과가 없습니다(참조 http://community.sharpdevelop.net/forums/t/8272.aspx 정보를 위해) 그러나 결과가 없습니다.

.Net으로 Zip 파일을 압축하고 Java.Utils.Zip 클래스로 압축을 푸는 코드 샘플이 있습니까?

Massimo에 감사합니다

도움이 되었습니까?

해결책

나는 사용했다 DotNetZip 라이브러리 제대로 작동하는 것 같습니다.일반적인 코드:

using (ZipFile zipFile = new ZipFile())
{
  zipFile.AddDirectory(sourceFolderPath);
  zipFile.Save(archiveFolderName);
}

다른 팁

SharpZipLib(최신 버전)로 zip을 생성하고 java.utils.zip으로 추출하는 것과 동일한 문제가 발생했습니다.

여기에 문제가 해결되었습니다.zip64 사용을 강제로 제외해야 했습니다.

ZipOutputStream s = new ZipOutputStream(File.Create(someZipFileName))

s.UseZip64 = UseZip64.Off;

SharpZipLib에 대해서는 도움을 드릴 수 없지만 다음을 사용하여 zip 파일을 생성해 볼 수 있습니다. 우편번호 패키지 수업 시스템.IO.패키징 타사 라이브러리를 사용하지 않고(.NET 3+ 필요)

.NET에서는 ZipPackage 클래스를 사용하고 싶지 않습니다. 이는 표준 zip 모델이 아닙니다.그렇긴 하지만 잘 알려진 이름을 가진 매니페스트 등이 포함된 파일의 특정 구조를 가정합니다.ZipPackage는 Office 문서 및 XPS 문서에 최적화된 것 같습니다.

다음과 같은 타사 라이브러리 http://www.codeplex.com/DotNetZip, 범용 ZIP 파일을 작성하고 좋은 상호 운용성을 원한다면 아마도 더 나은 선택일 것입니다.

DotNetZip은 Java의 java.utils.zip을 포함하여 거의 모든 것과 상호 운용성이 뛰어난 파일을 구축합니다.그러나 ZIP64 또는 유니코드와 같이 Java가 지원하지 않는 기능을 사용할 때는 주의하세요.ZIP64는 현재 Java가 제대로 지원하지 않는 매우 큰 아카이브에만 유용하다고 생각합니다.Java는 특정 방식으로 유니코드를 지원하므로 DotNetZip을 사용하여 유니코드 기반 ZIP 파일을 생성하는 경우 몇 가지 규칙만 따르면 제대로 작동합니다.

실제로 ZIP 파일을 준수하는지 판단하려면 PKZIP을 참조하세요. .ZIP 파일 형식 사양.

그만한 가치가 있는 만큼 저는 SharpZipLib을 사용하여 Windows Mobile 장치에서 ZIP을 생성하고 WinZip 또는 Windows XP에 내장된 압축 폴더 기능을 사용하여 여는 데 문제가 없었으며 SharpZipLib을 사용하여 데스크톱에서 ZIP을 생성하고 내 프로그램으로 처리하는 데에도 문제가 없었습니다. 모바일 장치에 자체 ZIP 추출 유틸리티(기본적으로 zlib 주변 래퍼)가 있습니다.

Linux에서 SharpZipLib 압축 파일의 압축을 풀 때 비슷한 문제가 발생했습니다.문제를 해결한 것 같습니다(현재 Linux와 Mac에서 작동하며 테스트했습니다). 내 블로그 게시물을 확인하세요. http://igorbrejc.net/development/c/sharpziplib-making-it-work-for-linuxmac

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top