Извлечь все файлы gz внутри папки на С#

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

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

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

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

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

Спасибо


person Ankit    schedule 22.05.2012    source источник
comment
возможный дубликат Как загрузить и распаковать карту сайта gz в С#?   -  person Mahmoud Al-Qudsi    schedule 22.05.2012
comment
В чем проблема? У вас есть проблемы с перебором всех файлов в каталоге или с распаковкой файла gz, что вызывает проблемы?   -  person Thorsten Dittmar    schedule 22.05.2012
comment
@ThorstenDittmar Проблема с распаковкой gz-файла.   -  person Ankit    schedule 22.05.2012


Ответы (3)


Попробуйте это как пакетный файл с бесплатным программным обеспечением командной строки 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

person MichelZ    schedule 22.05.2012
comment
Спасибо за это, не могли бы вы помочь мне запустить этот файл bat. Я имею в виду, какой должна быть команда для запуска этого из командной строки? Как передать путь к папке, в которой находится gz? - person Ankit; 22.05.2012
comment
Это просто взяло бы текущую папку, поэтому пришлось бы скопировать пакетный файл в ту же папку, что и ваш *.gz, а затем запустить его оттуда - person MichelZ; 22.05.2012
comment
Я получил эту ошибку: xxxx не является архивом RAR. Однако, если я щелкну правой кнопкой мыши мой файл gz и щелкну здесь «Извлечь», он будет успешно извлечен. - person Ankit; 22.05.2012
comment
очень сожалею об этом, я только что прочитал, что версия unrar для командной строки просто может обрабатывать архивы .rar, в отличие от программы Windows RAR :( - person MichelZ; 22.05.2012
comment
Я хотел отредактировать ответ, но мне предложили, что очередь редактирования заполнена. Так что в любом случае любой, у кого есть проблемы с распаковкой gz с помощью приведенного выше кода, должен заменить unrar только на winrar, и он будет работать, хотя он показывает пользовательский интерфейс при извлечении, у меня все в порядке. Вы также можете прокомментировать mkdir/pushd/popd, если хотите, чтобы все операции находились в одном каталоге. - person user734028; 17.06.2020

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

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 на правильные.

person Yasser Zamani    schedule 22.05.2012
comment
Метода Directory.EnumerateFiles, похоже, нет .net 3.5. Как я могу получить эту работу в .net 3.5? - person Ankit; 22.05.2012
comment
@Ankit, вы можете использовать Directory.GetFiles (msdn.microsoft.com/en- us/library/07wt70x2.aspx) в .net 3.5 - person Yasser Zamani; 23.05.2012

Я решил это. Спасибо 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 ------------------
person Ankit    schedule 24.05.2012