SevenZip.SevenZipExtractor构造函数在其他计算机

时间:2017-06-20 12:15:51

标签: c# .net 7zip

.net winforms应用程序中的相同代码正在我的机器上运行,同时在其他机器上崩溃,但有以下异常。

SevenZipExtractor.SetLibraryPath(Path.Combine(Environment.CurrentDirectory,
"x86", "7z.dll"));
var extractor = new SevenZipExtractor("myfile.7z", "abcd");

Myfile.7z有一些带有Unicode文本的文本文件

有关调用的详细信息,请参阅此消息的结尾 实时(JIT)调试而不是此对话框。

  

System.ArgumentException:无法编组:遇到不可映射的字符。          在System.String.ConvertToAnsi(Byte * pbNativeBuffer,Int32 cbNativeBuffer,Boolean fBestFit,Boolean fThrowOnUnmappableChar)          at System.StubHelpers.CSTRMarshaler.ConvertToNative(Int32 flags,String strManaged,IntPtr pNativeBuffer)          在SevenZip.NativeMethods.LoadLibrary(String fileName)          在SevenZip.SevenZipLibraryManager.LoadLibrary(对象用户,枚举格式)          在SevenZip.SevenZipExtractor.Init(String archiveFullName)          在SevenZip.SevenZipExtractor..ctor(String archiveFullName,String password)          at AlMadinaLibrary.Packages.Packager.GetFileObject [T](String dibx,String fileName)          在TestFile.Form1.LoadDropdownList()

1 个答案:

答案 0 :(得分:2)

问题是文件路径有Unicode字符。

在我的本地计算机中,我的路径为c:\data\myFile.7z,而在其他计算机上则为c:\میرا ڈیٹا\myFile.7z

SevenZip是原生7z.dll文件的dotnet包装器,它调用本机7z.dll作为基本功能。

异常来自dotnet native System.String.ConvertToAnsi函数,因为它无法映射Unicode字符。并且因为文件目录名在其他机器上的Unicode字符中,所以它抛出异常。