2011-11-29 3 views
1

모든 것이 잘 작동하고 있습니다. Zip/Rar ..에서 파일의 압축을 풀 수 있습니다. 문제는 어떻게 디렉토리에있는 파일을 압축 해제하는 방법입니까?디렉토리에서 하나의 파일 압축을 풉니 다.

FastZip fastZip = new FastZip(); 
fastZip.ExtractZip(source, targetDirectory, null); 

using (var fs = new FileStream(source, FileMode.Open, FileAccess.Read)) 
    using (var zf = new ZipFile(fs)) 
    { 
     var ze = zf.GetEntry("toc.out"); 
     if (ze == null) 
     { 
      throw new ArgumentException("toc.out", "not found in Zip"); 
     } 

     using (var s = zf.GetInputStream(ze)) 
     { 
      // do something with ZipInputStream 
     } 
    } 
} 

또는 DotNetZip/ZipDotNet와 :

using (ZipFile zip = ZipFile.Read(source)) 
{ 
    ZipEntry e = zip["toc.out"]; 
    e.Extract(); 
} 

그게 전부는, 루트에서 파일을 검색 HES의 원인이 작동하지 ..

는 파일을 직접 내가 사용 (SharpZipLib)을 압축 해제하려면 그리고 저는 또한 다음과 같은 일을하지 않을 것입니다 : DirectoryName/toc.out 어떻게하면 좋을까요? 검색이나 비슷한 다른 하위 폴더를 포함 할 수있는 매개 변수가 없습니까?

DirectoryInfo dirInfo = new DirectoryInfo(@"C:\"); 
foreach (var file in dirs.Select(dir => dir.EnumerateFiles().Where(i => i.Name.ToLower() == "wsdl.zip").FirstOrDefault()).Where(file => file != null)) 
{ 
    Console.WriteLine(file.ToString()); 
    Console.WriteLine(file.Length); 
} 

위의 코드를 아래와 같이 :(

+0

[? 특정 파일의 압축을 SharpZipLib 사용]의 중복 가능성 (http://stackoverflow.com/questions/328343/using-sharpziplib-to-unzip-specific-files) – samjudson

+0

아니. 나는 이것들을 보았다, 그들이 나 같은 디렉토리를 직접 압축을 풀어 ..... – eMi

답변

0

당신은 항목의 이름의 마지막 부분을 확인할 수 있습니다. 파일이 하위 폴더에있는 경우에서도, 이름 항목은 "폴더/파일 같은 것을 할 것이다. ext ". 달성 할 확장 방법 SH이 될 것 같은 :

public static ZipEntry GetEntryExt(this ZipFile file, string fileName) 
{ 
    foreach (ZipEntry entry in file) 
    { 
     if (entry.IsFile && entry.Name.EndsWith(Path.DirectorySeparatorChar + fileName)) 
      return entry; 
    } 

    return null; 
} 
+0

FastZip을 사용하여 다른 방법으로 시도했지만이 방법도 효과가있을 수 있습니다. 답을 대답으로 표시하므로 다른 사람도 알아야합니다. – eMi

+0

"FooBar.txt"를 반환하지 않도록주의해야합니다. ""Bar.txt "를 검색 할 때 정확하게 일치하는지"/Bar.txt "로 끝나는 지 확인하십시오. – samjudson

+0

@samjudson, 감사합니다. 그에 따라 내 대답을 업데이트하고 있습니다. – tafa

1

당신은 하위 폴더에서 파일을 찾기 위해 LINQ 식을 쓸 수있는 것은 파일 wsdl.zip에 대한 C 드라이브 아래의 모든 하위 폴더를 검색하여 이름과 길이를 인쇄 도움이 콘솔.

희망에.

+0

그 아이디어가 될 것이지만, 나는 먼저 모든 파일을 추출하고 그 다음에 파일을 찾으려고하지 않는다. 디렉터리에있는 보관소에서 특정 파일의 압축을 풉니 다. – eMi

+0

같은 디렉터리 또는 고정 위치에있는 파일의 경우 직접 파일을 가져올 수 있습니다. 당신이 그 위치를 확신하지 못한다면 나는 파일을 로딩하지 않고서도 찾기가 어려울 것이라고 생각한다. 더 효율적인 EnumerateFiles를 사용하기 위해 변경했습니다. – Rajesh

관련 문제