2013-08-17 4 views
0

왜 이것이 작동하지 않는지 잘 모릅니다. 나를 미치게하기 시작합니다!보관할 파일을 여러 개 추가하십시오.

 Stream stream = new MemoryStream(); 
     try 
     { 
      // output zip 
      using (ZipFile zipFile = new ZipFile()) 
      { 
       zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression; 
       ForEach(DataFile file In DataFiles) 
       { 
        String sourcePath = dataFile.Path; 
        String archiveName = dataFile.RealName; 
        //byte[] fileContents = File.ReadAllBytes(sourcePath); 
        //zipFile.AddEntry(archiveName, fileContents); 
        zipFile.AddFile(sourcePath, archiveName); 
        //e.FileName = archiveName; 
       } 

       zipFile.AddEntry("README.TXT", readmeMessage); 
       zipFile.Save(stream); 
      } 
     } 
     catch (Exception ex) 
     { 
      throw; 
     } 

모든 파일 경로가 유효 : 다른

아무도이 문제 내 코드는 다음과 같은 형태

을 갖고있는 것 같아요 없습니다.

나머지 부분을 주석으로 처리하면 readme 파일을 추가해도 문제가 없습니다. 다른 파일을 추가하면 zip 파일이 유효하지 않게됩니다.

나는 어떤 제안을 주셔서 감사합니다!

감사

UPDATE는

나는 딱 맞는 크기 스트림을 초기화하면 작동 것으로 나타났습니다. 누구든지 디스크에 기록하지 않고 아카이브 크기를 얻는 방법을 알고 있습니까?

후 업데이트는

지금에 대한 해결 방법을 추가했습니다.

내가

매우 절름발이 다른 스트림으로 다시 읽고 누군가가 내가 좋겠 더 좋은 방법을 제안 할 수 그래서 만약 내가 정말, 그것을 좋아하지 않아 다음 디스크에 아카이브를 저장하여 내가 할 필요가 무엇을 할 수

고마워!

답변

0

그것은 보인다 우편 아카이브에 도달하면 특정 크기 (실제 제한값을 충분히 테스트하지는 못했습니다)는 스트림에 안정적으로 저장할 수 없습니다.

아무도 그것을 말하는 것 같지 않지만이 문제를 해결하는 유일한 방법은 아카이브를 디스크에 저장하는 것입니다.

1

는 내가 함께 일한 적이 있지만, DotNetZip Library의 예 (일부 검사, 의견 및 제거 아무 관련 라인)에보고 나는이 발견

public static void Main(String[] args) 
{ 
    ... some input checking ... 

    string ZipFileToCreate = args[0]; 
    string DirectoryToZip = args[1]; 
    try 
    { 
     using (ZipFile zip = new ZipFile()) 
     { 
      // note: this does not recurse directories! 
      String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); 
      foreach (String filename in filenames) 
      { 
       Console.WriteLine("Adding {0}...", filename); 
       ZipEntry e = zip.AddFile(filename); 
       e.Comment = "Added by Cheeso's CreateZip utility."; 
      } 

      zip.Save(ZipFileToCreate); 
     } 
    } 
    catch (System.Exception ex1) 
    { 
     System.Console.Error.WriteLine("exception: " + ex1); 
    } 
} 
+0

이상하게도 파일에 저장하면 잘 동작합니다! 스트림에 저장하면 문제가 발생합니다. 그 단서를주는 +1! – CompanyDroneFromSector7G

+0

도서관에서 주어진 예를 읽었습니까? ZlibStreamExample을 살펴보고 코드 및 오류 메시지를 표시하면 시도해 보았습니다. –

+0

예. 코드가 문제가됩니다. 어떤 특별한 예를 생각 했습니까? 스트림에 저장하기위한 방법은 많지 않습니다. – CompanyDroneFromSector7G