提取 C# 中文件夹中的所有 gz 文件

本文关键字:gz 文件 中文 文件夹 提取 | 更新日期: 2023-09-27 18:34:57

我正在开发一个应用程序,需要提取文件夹中的gz文件。

我需要的是一个C#脚本,它可以循环给定文件夹中的所有gz文件并将它们提取到同一文件夹中。

我知道有一些库可以做到这一点,但我无法让它们为 gz 工作,我让他们为 zip 工作。

或者,如果还有其他解决方案,即是否可以创建可以使用WinRar命令行实用程序来实现相同目的的批处理脚本。如果可能的话,我不知道只是一个想法。

注意:我想我必须放弃第二个选项 - WinRar 命令只能处理 RAR 文件。

谢谢

提取 C# 中文件夹中的所有 gz 文件

尝试将其作为带有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参数 正确的一个。

我解决了。感谢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 ------------------
@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