Извлечь все файлы GZ в папке в C#

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

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

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

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

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

Спасибо

4 ответа

Решение

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

@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 ------------------

Попробуйте это как пакетный файл с бесплатной программой командной строки winrar "unrar":

@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

Я могу предложить что-то вроде ниже:

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);
        }
    }
}

ПРИМЕЧАНИЕ. Пожалуйста, замените пути и параметры winrar.exe самостоятельно на правильные.

@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
Другие вопросы по тегам