2013-07-02 1 views
0

, поэтому у меня есть небольшой фрагмент кода, который обнаруживает файлы в папке и систематически застегивает их после достижения определенного возраста. Теперь я работаю над фрагментом кода, чтобы разархивировать файлы определенного диапазона дат по запросу пользователя для использования в программном обеспечении.распакуйте файл в C# через Winzip и его расширение cmd

Моя проблема в том, что строка командной строки для zip-файлов отлично работает, но unzip не ... ниже - это фрагмент кода, показывающий, как я разархивирую, пожалуйста, дайте мне знать, что я должен делать по-другому, чтобы обеспечить распаковку , благодаря!

private void UnZipFile() 
     { 
      if (myRecord == null) 
      { 
       if (File.Exists(zipInfo.FullName)) 
       {       
        Process LogUnzipper = new Process(); 
        //32-bit system 
        if (File.Exists("c:\\Program Files\\WinZip\\WZZIP.exe")) 
        { 
         //WZZIP.exe being the WinZip executable 
         LogUnzipper.StartInfo.FileName = "c:\\Program Files\\WinZip\\WZZIP.exe"; 
        } 
        //64-bit system 
        else if (File.Exists("c:\\Program Files (x86)\\WinZip\\WZZIP.exe")) 
        { 
         //WZZIP.exe being the WinZip executable 
         LogUnzipper.StartInfo.FileName = "c:\\Program Files (x86)\\WinZip\\WZZIP.exe"; 
        } 
        //here is where I think I'm screwing up something.. 
        string action = "-e " + "\"" + zipInfo.FullName + "\"" + " \"" + zipInfo.DirectoryName + "\""; 
        //happen in background 
        LogUnzipper.StartInfo.CreateNoWindow = true; 
        LogUnzipper.StartInfo.UseShellExecute = false; 
        LogUnzipper.StartInfo.Arguments = action; 
        LogUnzipper.Start(); 
        while (!LogUnzipper.HasExited) 
        { 
         LogUnzipper.WaitForExit(500);// 1/2 sec 
        } 
        //adding break point at this line yields no unzipped Log file :(
       } 
       ... 

мои мысли, что я как-то называть ЦМД неправильно в string action? даже если я проверю его в командной строке Windows, это правильное форматирование.

*** Следует отметить, что ZipInfo.FullName является чем-то вроде ex: «C: \ Users \ 16208 \ Software \ Beta \ logs \ 6_2013 \ Log_10AM_to_11AM.zip» до формы, поэтому я даю точный путь к застрявшему предмету.

+4

Используйте настоящую библиотеку C# ZIP. – SLaks

+0

объясните, пожалуйста. – DarthSheldon

+0

@DarthSheldon Существует несколько библиотек .NET zip, таких как [DotNetZip] (http://dotnetzip.codeplex.com/) и [SharpZipLib] (http://www.icsharpcode.net/opensource/sharpziplib/). Оба этих варианта предпочтительнее запускать WinZip (не в последнюю очередь потому, что у конечного пользователя не установлен WinZip). – keyboardP

ответ

0

Вы можете использовать некоторую бесплатную библиотеку .Net для открытых и распакованных (как предложил SLaks). Например, DotNetZip.

using (ZipFile decompress = ZipFile.Read(ZipFilePath)) 
    {  
     foreach (ZipEntry e in decompress) 
     { 
      e.Extract(TargetPath, ExtractExistingFileAction.OverwriteSilently); 
     } 
    } 

Что касается вашего кода, ожидающих полсекунды может быть недостаточно для распаковки. Также вы можете попробовать запустить команду unzip в командной строке и проверить вывод.

+0

В основном я должен использовать Win-zip – DarthSheldon

+0

+1: DotNetZip. Это, по крайней мере, так же быстро, как WinZip или Zip/Unzip. –

+0

не имеет значения, это обязательная функция программного обеспечения – DarthSheldon

0

Если у вас есть WinZip установлен, попробуйте следующее:

System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", @"/c start winzip32 -e " + fileName + @" C:\SomeDirectory"); 
rocStartInfo.UseShellExecute = false; 
System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
proc.StartInfo = procStartInfo; 
proc.Start(); 
proc.WaitForExit(); 

где имя_файла это полный путь к * .rar файл.