如何使用C#压缩Excel文件以压缩或限制文件扩展名

时间:2014-06-05 08:57:44

标签: c# asp.net excel

我想将Excel文件压缩为.zip或.cap扩展名。代码用于执行此操作,它正在压缩文件,但该zip文件无法解压缩。解压缩,我得到错误文件文件已损坏或无法解压缩。 我正在使用的代码:

    static public bool CompressFile(string file, string outputFile)

      {

        try
        {

            using (var inFile = File.OpenRead(file))
            {

                using (var outFile = File.Create(outputFile))
                {

                    using (var compress = new GZipStream(outFile, CompressionMode.Compress, false))
                    {

                        byte[] buffer = new byte[inFile.Length];


                        int read = inFile.Read(buffer, 0, buffer.Length);

                        while (read > 0)
                        {
                            compress.Write(buffer, 0, read);
                            read = inFile.Read(buffer, 0, buffer.Length);
                        }
                    }
                }
            }
            return true;
        }
        catch (IOException ex)
        {
       MessageBox.Show(string.Format("Error compressing file: {0}", ex.Message));
            return false;
        }
    }

即使我找一些链接来获得正确的解决方案。但没有什么是锻炼。我需要一些建议来获得适当的解决方案。有任何答案。

1 个答案:

答案 0 :(得分:0)

此代码使用SharpZipLib库并将压缩可以解压缩的文件

    private void Zip()
    {
        string output = @"C:\TEMP\test.zip";
        string input = @"C:\TEMP\test.xlsx";

        using (var zipStream = new ZipOutputStream(System.IO.File.Create(output)))
        {
            zipStream.SetLevel(9);
            var buffer = new byte[4096];
            var entry = new ZipEntry(Path.GetFileName(input));
            zipStream.PutNextEntry(entry);

            using (FileStream fs = System.IO.File.OpenRead(input))
            {
                int sourceBytes;
                do
                {
                    sourceBytes = fs.Read(buffer, 0, buffer.Length);
                    zipStream.Write(buffer, 0, sourceBytes);
                } while (sourceBytes > 0);
            }

            zipStream.Finish();
            zipStream.Close();
        }
    }