我必须将文件从一个主机传输到另一个主机,所以我决定使用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>");
}
}
请有人建议一个适当的解决方案, 在此先感谢。
答案 0 :(得分:0)
如果您设置了正确的dll路径,我认为使用(Environment.Is64BitProcess)而不是Environment.Is64BitOperatingSystem)可以工作。请确保该路径中存在dll。