Извлечь все файлы 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