2014-08-29 3 views
0

나는 .NET 4.5.NET 3.5

public static void SearchZippedLogs() 
    { 
     Console.WriteLine("Searching compressed logs"); 
     Console.WriteLine(" "); 

     DirectoryInfo di = new DirectoryInfo(sPath + "\\" + sDate + "\\"); 
     FileInfo[] files = di.GetFiles("*.zip"); 

     try 
     { 
      foreach (var file in files) 
      { 
       using (ZipArchive archive = ZipFile.OpenRead(sPath + "\\" + sDate + "\\" + file.Name)) 
       { 
        foreach (ZipArchiveEntry entry in archive.Entries) 
        { 
         if (entry.FullName.EndsWith(".ininlog", StringComparison.OrdinalIgnoreCase)) 
         { 
          try 
          { 
           Directory.CreateDirectory(temp); 
           entry.ExtractToFile(Path.Combine(temp, entry.FullName)); 
           try 
           { 
            Stream sTemp = new FileStream(temp + "\\" + entry.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 

            using (StreamReader sr = new StreamReader(sTemp)) 
            { 
             string line; 
             while ((line = sr.ReadLine()) != null) 
             { 
              if (line.Contains(sTerm)) 
              { 
               Console.WriteLine("{0} contains\"{1}\"", file.Name, sTerm); 
               if (bLog) 
                Logger(file.Name + " contains " + sTerm, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm); 
               break; 
              } 
             } 
            } 
           } 
           catch (UnauthorizedAccessException ae) 
           { 
            Console.WriteLine(ae.Message); 
            if (bLog) 
             Logger(ae.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm); 
           } 
           catch (SystemException se) 
           { 
            Console.WriteLine(se.Message); 
            if (bLog) 
             Logger(se.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm); 
           } 
           catch (ApplicationException ape) 
           { 
            Console.WriteLine(ape.Message); 
            if (bLog) 
             Logger(ape.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm); 
           } 
           catch (Exception e) 
           { 
            Console.WriteLine(e.Message); 
            if (bLog) 
             Logger(e.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm); 
           } 
          } 
          catch (UnauthorizedAccessException ae) 
          { 
           Console.WriteLine(ae.Message); 
           if (bLog) 
            Logger(ae.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm); 
          } 
          catch (SystemException se) 
          { 
           Console.WriteLine(se.Message); 
           if (bLog) 
            Logger(se.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm); 
          } 
          catch (ApplicationException ape) 
          { 
           Console.WriteLine(ape.Message); 
           if (bLog) 
            Logger(ape.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm); 
          } 
          catch (Exception e) 
          { 
           Console.WriteLine(e.Message); 
           if (bLog) 
            Logger(e.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm); 
          } 
          finally 
          { 
           Directory.Delete(temp, true); 
           archive.Dispose(); 
          } 
         } 
        } 
       } 
      } 
     } 

문제는 우리의 서버 전용 .NET을 실행에 설치되어있는 경우 위대한 작품을 다음을 우리가 실행 3.5 인해 소프트웨어에, 나는 사용하여 같은 일을 수행 할 필요가 .NET 3.5

내가 DotNetZip 및 DeflateStream 클래스 보았다했지만 이

예상 결과 각 zip 파일의 압축을 풉니 다 .NET 3.5

이 복제 문제를 데 디렉토리에서 임시로 발견 인쇄 파일 이름은 다음

그래서 내가 여기의 다음

using System; 
using System.IO; 
using Ionic.Zip; 
namespace DotNetTest 
{ 
    class Program 
    { 
    private static string sPath; 
    private static string sTempLoc = Path.GetTempPath() + Path.GetRandomFileName(); 
    static void Main(string[] args) 
    { 
     Console.WriteLine("Enter Path"); 
     sPath = Console.ReadLine(); 

     Console.WriteLine("Looking in " + sPath); 

     DirectoryInfo di = new DirectoryInfo(sPath + "\\"); 
     FileInfo[] files = di.GetFiles("*.zip"); 

     foreach (var file in files) 
     { 
      //Console.WriteLine(file.FullName); 
      using (ZipFile archive = ZipFile.Read(file.FullName)) 
      { 
       foreach(ZipEntry e in archive) 
       { 
        Console.WriteLine("Extracting " + e.FileName + " to " + sTempLoc); 
        e.Extract(sTempLoc, ExtractExistingFileAction.OverwriteSilently); 
       } 
      } 
     } 
     Console.WriteLine("Finsihed! Press any key to exit"); 
     Console.ReadKey(); 
    } 
} 
} 
+1

이 경우 DotNetZip이 최상의 솔루션이라고 생각합니다. 그래서 귀하의 질문에 있어야합니다 : DotNetZip으로 지정된 위치로 ZIP 파일을 압축 해제하려면 어떻게해야합니까? DotNetZip 사이트에는 정확하게이 작업을 수행하는 방법을 보여주는 예제가 많이 있으므로 문제가 발생할 수있는 방법을 알지 못합니다. 어쩌면 당신은 정교 할 수 있을까요? –

+0

요한은 나에게 몇 가지를 주려고 노력하고 정교하게 다룰 것입니다 – ondrovic

+0

왜 여기에 그것을 반복합니까? 이 프로젝트에는 [예제 페이지] (http://dotnetzip.codeplex.com/wikipage?title=CS-Examples&referringTitle=Examples)가 있습니다. –

답변

0

를 사용하여 그것을 밖으로 일을 생각하는 도움을 임시 항목을

감사를 삭제하면 위치,하는 항목에 대한 그것을 통해 검색 방법은 그렇게 할 것입니다. 파일의 경로와 대상 디렉토리를 인수로 전달하기 만하면됩니다.

private void UnZip(string filePath, string targetPath) 
{ 
    if (String.IsNullOrWhiteSpace(filePath) || String.IsNullOrWhiteSpace(targetPath)) 
    { 
     throw new ArgumentException("Arguments cannot be null or empty."); 
    } 

    using (ZipFile zf = ZipFile.Read(filePath)) 
    { 
     foreach (var entry in zf) 
     { 
      entry.Extract(targetPath, ExtractExistingFileAction.OverwriteSilently); 
     } 
    } 
}