2012-05-22 2 views
0

Я работаю над приложением и вам нужно извлечь файлы gz внутри папки.Извлечь все файлы gz внутри папки в C#

Что мне нужно - это скрипт C#, который может закодировать все файлы gz в данной папке и извлечь их в одну папку.

Я знаю, что для этого есть несколько библиотек, но я не мог заставить их работать для gz, но я заставил их работать на zip.

Или если есть какое-либо другое решение для того же i.e, если может быть создан командный скрипт, который может использовать утилиту командной строки WinRar для достижения того же. Я не знаю только идеи, если это возможно.

Примечание: Я думаю, что мне нужно отказаться от этого второго варианта. Команда WinRar может обрабатывать только файлы RAR.

Благодаря

+0

возможно дубликат [Как скачать и распаковать файл карты сайта GZ в C#?] (Http://stackoverflow.com/questions/1573269/how-to-download-and-unzip-a -sitemap-gz-file-in-c) –

+0

В чем проблема? У вас есть проблемы с итерацией по всем файлам в каталоге или распаковкой gz-файла, что вызывает проблемы? –

+0

@ThorstenDittmar Распаковка - это gz-файл. – Ankit

ответ

1

Я решил. Спасибо MichelZ за то, что вы указали путь. Я получил версию командной строки 7-zip, чтобы сделать трюк для меня.

@REM ------- BEGIN demo.cmd ---------------- 
@setlocal 
@echo off 
set path="C:\Program Files\7-Zip\";%path% 
for /F %%i in ('dir /s/b *.gz') do call :do_extract "%%i" 
for /F %%i in ('dir /s/b *.zip') do call :do_extract "%%i" 
goto :eof 

:do_extract 
pushd %~dp1 
7z e %1 -y 
popd 
REM ------- END demo.cmd ------------------ 
1

Попробуйте это как пакетный файл с "UNRAR" командной строки бесплатно WinRar в:

@REM ------- BEGIN demo.cmd ---------------- 
@setlocal 
@echo off 
set path="C:\Program Files\WinRAR\";%path% 
for /F %%i in ('dir /s/b *.gz') do call :do_extract "%%i" 
goto :eof 

:do_extract 
echo %1 
mkdir %~1.extracted 
pushd %~1.extracted 
unrar e %1 
popd 

REM ------- END demo.cmd ------------------ 

предоставлены: http://www.respower.com/page_tutorial_unrar

+0

Спасибо за это. Можете ли вы, пожалуйста, помочь мне запустить этот файл bat. Я имею в виду, что должно быть командой для запуска этого из командной строки? Как передать путь к папке, где находится gz? – Ankit

+0

Это займет только «текущая папка», поэтому придется скопировать пакетный файл в ту же папку, что и ваш * .gz, а затем запустить его оттуда – MichelZ

+0

У меня получилась эта ошибка: «xxxx» не является архивом RAR. Однако, если я щелкнул правой кнопкой мыши, что мой gz-файл и нажмите «Экстракт», он был успешно извлечен. – Ankit

0

я могу предложить кое-что, как показано ниже:

using System; 
using System.IO; 
using System.Linq; 

class Program 
{ 
    static void Main(string[] args) 
    { 

     try 
     { 
      var files = from file in Directory.EnumerateFiles(@"c:\something", 
          "*.gz", SearchOption.AllDirectories) 
         select new 
         { 
          File = file, 
         }; 

      foreach (var f in files) 
      { 
       Process.Start("c:\winrar.exe", f.File); 
      } 
      Console.WriteLine("{0} files found and extracted!", 
       files.Count().ToString()); 
     } 
     catch (UnauthorizedAccessException UAEx) 
     { 
      Console.WriteLine(UAEx.Message); 
     } 
     catch (PathTooLongException PathEx) 
     { 
      Console.WriteLine(PathEx.Message); 
     } 
    } 
} 

NOTE: Please replace paths and winrar.exe parameters yourself with correct one.

+0

Directory.EnumerateFiles метод, похоже, не существует .net 3.5. Я получаю эту работу в .net 3.5? – Ankit

+0

@Ankit, вы можете использовать Directory.GetFiles (http://msdn.microsoft.com/en-us/library/07wt70x2.aspx) в .net 3.5 –

-1
@setlocal 
@echo off 
set path="C:\Program Files\WinRAR\";%path% 
for /F %%i in ('dir /s/b *.gz') do call :do_extract "%%i" 
goto :eof 

:do_extract 
echo %1 
mkdir %~1.extracted 
pushd %~1.extracted 
Winrar e %1 
popd 
+0

Это странно выглядящий C# ... –

Смежные вопросы