2012-04-06 5 views
2

기존 JAR 파일을 업데이트 (파일 추가/수정)하려고하는데 DotNetZip 라이브러리를 사용하는이 코드로 인해 아카이브가 "손상됨"으로 나타나고 WinRAR을 ZIP 또는 JAR 파일로 열 수 없습니다.DotNetZip으로 JAR 파일을 업데이트하면 아카이브가 손상됩니까?

using (FileStream fs = new FileStream("/path/to/jar", FileMode.Open)) 
{ 
    ZipFile zip = ZipFile.Read(fs); 
    fs.Seek(0, SeekOrigin.Begin); 
    zip.Save(fs); 
} 

ZIP과 JAR 형식의 차이점은 무엇입니까? 나는 그 파일의 첫 번째 항목으로 매니페스트가있는 ZIP 형식이라는 인상을 받고있었습니다. 분명히 그렇지 않습니다. 이 작업을 수행 할 수있는 기존의 (C#) 라이브러리가 있습니까?

답변

1

JAR은 [표준] ZIP 아카이브가있는 이진 호환 입니다. 선택적 Manifest 파일 만 처리되지만 "손상된 아카이브"는 발생하지 않습니다.

나는 무슨 일이 일어나고 이들 중 하나 (또는 ​​둘 다) 생각 : 그것은 끝에서 왼쪽으로 "쓰레기"가 있도록 파일을 절단하지 됩니다

  1. .
  2. 실제 "읽기"는 게으르며 후자의 "저장"은 올바르게 읽히기 전에 데이터를 엉망으로 만들 수 있습니다.

나는 그것이 발행하는 확실하지 않다

+1

(A 파일에 지퍼로 잠그는 것은.이 확인 될 수 있도록 것),하지만 당신은 정확했다. ZipFile을 MemoryStream에 저장하고, ZipFile의 파일 스트림을 닫고 null 처리하며, ZipFile을 널링 한 다음 최종 목적지에 MemoryStream을 쓰는 방법으로 제작 코드에서이 문제를 해결했습니다. 당신이 그날을 구 했으니, 내 모든 시간의 업무가 낭비되었다고 생각했습니다. – Salis