使用SharpZipLib解压缩.tar.gz

问题描述 投票:2回答:4

我试图在一个拉链内解压缩tar.gz,但我不能

它向我显示错误“找不到中心目录”,我不知道该怎么做。

首先,我将zip文件解压缩到一个临时文件夹,然后在该文件夹上搜索.tar.gz并尝试解压缩但崩溃时出现该错误,但我可以使用winrar应用程序打开它,.tar.gz有一些文件夹和一些文件夹里面的文件。

这是我的代码:

var trash = Path.Combine(_temporalPath, "Trash");
        try
        {
            var zip = new FastZip();
            Directory.CreateDirectory(trash);
            zip.ExtractZip(_origin, trash, "");
            var gzip = Directory.GetFiles(trash, "*.tar.gz")[0];
            zip.ExtractZip(gzip, trash, FastZip.Overwrite.Always.ToString());
            File.Delete(gzip);
        }
        catch (Exception)
        {
            //IGNORE
        }

我搜索信息,但我只找到解压缩一个文件。 enter image description here

我需要的是打开tar.gz并从里面获取文件。

c# tar sharpziplib gz
4个回答
1
投票

最后我找到了表格。

var trash = Path.Combine(_temporalPath, "Trash");
        try
        {
            var zip = new ICSharpCode.SharpZipLib.Zip.FastZip();
            Directory.CreateDirectory(trash);
            zip.ExtractZip(_origin, trash, null);
            var gzip = Directory.GetFiles(trash, "*.gz")[0];
            UnGzFile(gzip, Path.Combine(trash, Path.GetFileNameWithoutExtension(gzip)));
            File.Delete(gzip);
            var tar = Directory.GetFiles(trash, "*.tar")[0];
            var stream = File.OpenRead(tar);
            var tarArchive = ICSharpCode.SharpZipLib.Tar.TarArchive.CreateInputTarArchive(stream);
            tarArchive.ExtractContents(trash);
            tarArchive.Close();
            stream.Close();
            File.Delete(tar);
        }
        catch (Exception ex)
        {
            //IGNORE
        }

对不起,谢谢


1
投票

您可以使用ZipFile类简单地执行此操作:

File.Move(source, Path.ChangeExtension(source, ".zip"));
ZipFile.ExtractToDirectory(Path.ChangeExtension(source, ".zip"), destination);

1
投票

使用SharpZipLib

using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.Tar;

public void ExtractTGZ(String gzArchiveName, String destFolder)
{
    Stream inStream = File.OpenRead(gzArchiveName);
    Stream gzipStream = new GZipInputStream(inStream);

    TarArchive tarArchive = TarArchive.CreateInputTarArchive(gzipStream);
    tarArchive.ExtractContents(destFolder);
    tarArchive.Close();

    gzipStream.Close();
    inStream.Close();
}

0
投票

https://github.com/icsharpcode/SharpZipLib/wiki/FastZip

using System;
using ICSharpCode.SharpZipLib.Zip;

public void TestFastZipUnpack(string zipFileName, string targetDir) {

    FastZip fastZip = new FastZip();
    string fileFilter = null;

    // Will always overwrite if target filenames already exist
    fastZip.ExtractZip(zipFileName, targetDir, fileFilter);
}
© www.soinside.com 2019 - 2024. All rights reserved.