无法使用asp.net中的7zip归档和取消归档文件

时间:2018-06-18 07:31:46

标签: c# asp.net iis 7zip

我必须将文件从一个主机传输到另一个主机,所以我决定使用zip(IONIC),但问题是当它涉及更大的文件时会占用大量内存,所以我决定使用7Z DLL。我试图实现压缩和放大在更改某些设置后,解压缩在我的控制台上完全正常工作(未经检查的偏好 - 来自https://blog.jongallant.com/2011/10/7-zip-dll-file-does-not-exist/的32位)。

但在ASP.net应用程序上失败,我得到“无法加载7-zip库或内部COM错误!消息:无法加载库。”当我尝试压缩或解压缩时

我试过的代码。

protected void btnCompress_Click(object sender, EventArgs e)
        {
            var dllPath = "";

            if (Environment.Is64BitOperatingSystem)
            {
                dllPath = HttpContext.Current.Server.MapPath(@"7z\7z64.dll");
            }
            else
                dllPath = HttpContext.Current.Server.MapPath(@"7z\7z.dll");

            var tmpPath = System.IO.Path.Combine(txtTempPath.Text, txtDir.Text);
            try
            {
                SevenZip.SevenZipCompressor.SetLibraryPath(dllPath);
                SevenZipCompressor sz = new SevenZipCompressor();
                sz.CompressionLevel = CompressionLevel.Ultra;
                sz.CompressionMode = CompressionMode.Create;
                sz.CompressionMethod = CompressionMethod.Default;
                sz.FastCompression = true;
                sz.CompressDirectory(tmpPath, tmpPath + "_7Zip.7z");
                //Directory.Delete(backupFolder, true);                
                Response.Write("<script>alert('Compressed successfully');</script>");
            }
            catch (Exception ex)
            {
                Response.Write("<script>alert('" + ex.Message + "');</script>");
                //throw ex;
            }
        }

        protected void btnExtract_Click(object sender, EventArgs e)
        {
            try
            {
                var tmpPath = System.IO.Path.Combine(txtTempPath.Text, txt7z.Text);

                SevenZipExtractor.SetLibraryPath(@"C:\Program Files\7-Zip\7z.dll");
                SevenZipExtractor zip = new SevenZipExtractor(tmpPath);
                zip.ExtractArchive(System.IO.Path.GetFileNameWithoutExtension(tmpPath));

                Response.Write("<script>alert('Extracted successfully');</script>");
            }
            catch (Exception ex)
            {
                Response.Write("<script>alert('" + ex.Message + "');</script>");
            }
        }

请有人建议一个适当的解决方案, 在此先感谢。

1 个答案:

答案 0 :(得分:0)

如果您设置了正确的dll路径,我认为使用(Environment.Is64BitProcess)而不是Environment.Is64BitOperatingSystem)可以工作。请确保该路径中存在dll。