首页 > 解决方案 > 压缩后无效的 C# Zip 文件

问题描述

我正在编写代码以使用内置的 .NET 库在 C# 中压缩 ZIP 文件:

使用 System.IO.Compression;使用 System.IO;

但是,当压缩完成时,代码会输出一个无效的 zip 文件。似乎在代码中的某处,文件要么没有正确写入,要么完全关闭。我已经使用 dispose 和 close 来释放资源。

public bool CompressFile(FileInfo theFile)
        {
           
            StringBuilder compressSuccess = new StringBuilder();
            FileStream sourceFile = File.OpenRead(theFile.FullName.ToString());
            FileStream destinationFile = File.Create(theFile.FullName + ".zip");

            byte[] buffer = new byte[sourceFile.Length];
            sourceFile.Read(buffer, 0, buffer.Length);

            using (GZipStream output = new GZipStream(destinationFile,
                CompressionMode.Compress, true))
            {

                output.Write(buffer, 0, buffer.Length);
        
                


            }

            sourceFile.Dispose();
            destinationFile.Dispose();
            sourceFile.Close();
            destinationFile.Close();
           
            return true;
        }

我会做错什么?是因为我强制扩展“.zip”吗?

标签: c#.netsystem.io.compression

解决方案


按照 FrankJames 建议的链接,这是创建 zip 文件的代码示例:

        var zipFile = @"e:\temp\outputFile.zip";
        var theFile = @"e:\temp\sourceFile.txt";
        using (var zipToCreate = new FileStream(zipFile, FileMode.Create))
        {
            using (var archive = new ZipArchive(zipToCreate, ZipArchiveMode.Create))
            {
                var fileEntry = archive.CreateEntry("FileNameInsideTheZip.txt");
                using (var sourceStream = File.OpenRead(theFile))
                using (var destStream = fileEntry.Open())
                {
                    var buffer = new byte[sourceStream.Length];
                    sourceStream.Read(buffer, 0, buffer.Length);
                    destStream.Write(buffer, 0, buffer.Length);
                    destStream.Flush();
                }
            }
        }

推荐阅读