-1

我想要压缩/解压缩没有任何 dll 的目录。

我使用此代码使用 GzipStream 压缩文件。

 public static void Compress(FileInfo fileToCompress)
    {
        using (FileStream originalFileStream = fileToCompress.OpenRead())
        {
            if ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
            {
                using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
                {
                    using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress))
                    {
                        originalFileStream.CopyTo(compressionStream);
                        Console.WriteLine("Compressed {0} from {1} to {2} bytes.",
                            fileToCompress.Name, fileToCompress.Length.ToString(), compressedFileStream.Length.ToString());
                    }
                }
            }
        }
    }

我将此链接用于压缩目录。但不要为我工作:(

4

2 回答 2

0

据我所知,您不能将整个目录压缩为单个 gz 文件。您最终会得到多个 gz 文件。

于 2015-06-10T21:43:54.537 回答
0

您可以将目录打包为 .Tar 文件,然后在 tar 文件上使用 gZip。这需要使用诸如 SharpZipLib 之类的库。您可以从“管理 NuGet 包”菜单安装该库。

DirectoryInfo directoryOfFilesToBeTarred = new DirectoryInfo(@"c:\tar\start");
FileInfo[] filesInDirectory = directoryOfFilesToBeTarred.GetFiles();
String tarArchiveName = @"c:\tar\mytararchive.tar.gz";
using (Stream targetStream = new GZipOutputStream(File.Create(tarArchiveName)))
{
    using (TarArchive tarArchive = TarArchive.CreateOutputTarArchive(targetStream, TarBuffer.DefaultBlockFactor))
    {
        foreach (FileInfo fileToBeTarred in filesInDirectory)
        {
            TarEntry entry = TarEntry.CreateEntryFromFile(fileToBeTarred.FullName);
            tarArchive.WriteEntry(entry, true);
        }
    }
}

来源: https ://dotnetcodr.com/2015/02/04/packing-and-unpacking-files-using-tar-archives-in-net/

或者

您可以在纯 .NET 3.0 中压缩目录。由于修改了 GPL 许可证,可能不希望使用 SharpZipLib。

首先,您需要对 WindowsBase.dll 的引用。

此代码将打开或创建一个 zip 文件,在其中创建一个目录,并将文件放在该目录中。如果你想压缩一个文件夹,可能包含子目录,你可以遍历目录中的文件并为每个文件调用这个方法。然后,您可以深度优先搜索文件的子目录,为每个文件调用方法并传入路径以在 zip 文件中创建该层次结构。

public void AddFileToZip(string zipFilename, string fileToAdd, string destDir)
{
    using (Package zip = System.IO.Packaging.Package.Open(zipFilename, FileMode.OpenOrCreate))
    {
        string destFilename = "." + destDir + "\\" + Path.GetFileName(fileToAdd);
        Uri uri = PackUriHelper.CreatePartUri(new Uri(destFilename, UriKind.Relative));
        if (zip.PartExists(uri))
        {
            zip.DeletePart(uri);
        }
        PackagePart part = zip.CreatePart(uri, "", CompressionOption.Normal);

        using (FileStream fileStream = new FileStream(fileToAdd, FileMode.Open, FileAccess.Read))
        {
            using (Stream dest = part.GetStream())
            {
                CopyStream(fileStream, dest);
            }
        }
    }
}

destDir 可以是一个空字符串,它将文件直接放在 zip 中。

资料来源: https ://weblogs.asp.net/jongalloway/creating-zip-archives-in-net-without-an-external-library-like-sharpziplib

https://weblogs.asp.net/albertpascual/creating-a-folder-inside-the-zip-file-with-system-io-packaging

于 2019-04-12T01:46:39.337 回答