2011-01-11 3 views

답변

0

(나는 인용) http://community.sharpdevelop.net/forums/p/10856/29901.aspx를 참조하십시오 "우리의 현재 로드맵은 처리 UTF 항목의 파일 이름을 포함 [...]"그 UTF 파일 이름을 이해하는 나를 이끌 것 는 현재 지원되지 않습니다.

+1

고맙습니다. 저는 ZipOutputStream을 사용하여 UTF8 이름의 파일을 압축 할 수는 있지만, 빈 폴더도 어떻게 압축 할 수 있는지 궁금합니다. – BreakHead

0

나는 이것이 매우 오래되었다는 것을 알고 있지만 같은 문제 (ZipOutputStream으로 빈 디렉토리를 압축)를 보았습니다.

다른 상위 디렉토리를 기반으로 재귀 호출을 만들고 있습니다.

public void CompressFolder(string path, ZipOutputStream zipStream, int folderOffset) 
    { 
     var files = Directory.GetFiles(path); 
     var directories = Directory.GetDirectories(path); 

     //this is where I add the empty directory 
     //code begin 
     if (files.Count() == 0 && directories.Count() == 0) 
     { 
      DirectoryInfo di = new DirectoryInfo(path); 
      string cleanName = ZipEntry.CleanName(path.Substring(folderOffset)) + "/"; 
      ZipEntry zipEntry = new ZipEntry(cleanName); 
      zipEntry.DateTime = di.LastWriteTime; 
      zipStream.PutNextEntry(zipEntry); 
      zipStream.CloseEntry(); 
      return; 
     } 
     //code end 

     foreach (string file in files) 
     { 
      FileInfo fileInfo = new FileInfo(file); 
      string cleanName = ZipEntry.CleanName(file.Substring(folderOffset)); 
      ZipEntry zipEntry = new ZipEntry(cleanName); 
      zipEntry.DateTime = fileInfo.LastWriteTime; 
      zipEntry.Size = fileInfo.Length; 
      zipStream.PutNextEntry(zipEntry); 
      byte[] numArray = new byte[4096]; 
      using (FileStream fileStream = File.OpenRead(file)) 
      { 
       StreamUtils.Copy(fileStream, zipStream, numArray); 
      } 
      zipStream.CloseEntry(); 
     } 

     foreach (string directory in directories) 
     { 
      CompressFolder(directory, zipStream, folderOffset); 
     } 
    } 
관련 문제