2017-06-20 220 views
1

.net winforms应用程序中的相同代码正在我的机器上工作,而在其他机器上崩溃时出现以下异常。SevenZip.SevenZipExtractor构造函数在其他机器上抛出错误

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

Myfile.7z有Unicode文本

一些文本文件,请参阅此消息的结尾的详细信息,调用 刚刚实时(JIT)调试而不是此对话框。

System.ArgumentException:Can not marshal:遇到无法映射的字符。 在System.String.ConvertToAnsi(BYTE * pbNativeBuffer,的Int32 cbNativeBuffer,布尔fBestFit,布尔fThrowOnUnmappableChar) 在System.StubHelpers.CSTRMarshaler.ConvertToNative(的Int32标志,字符串strManaged,IntPtr的pNativeBuffer) 在SevenZip.NativeMethods.LoadLibrary(字符串文件名) 在SevenZip.SevenZipLibraryManager.LoadLibrary(对象用户,枚举格式) 在SevenZip.SevenZipExtractor.Init(字符串archiveFullName) 在SevenZip.SevenZipExtractor..ctor(字符串archiveFullName,字符串password) 在AlMadinaLibrary.Packages.Packager.GetFileObject [T](String dibx,String fileName) at TestFile.Form1.LoadDropdownList()

+0

您在两台机器上测试了完全相同的7z(压缩)文件? – mjwills

+0

到SevenZipExtractor的第一个参数应该是一个完全合格的路径(例如'@ “C:\ Test.7z”')。你尝试过吗? – mjwills

回答

2

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

在我的本地机器我的道路是c:\data\myFile.7z,而另一台机器上它是c:\میرا ڈیٹا\myFile.7z

SevenZip原产7z.dll文件的DOTNET包装,它的基本功能调用本地7z.dll

唯一的例外是从DOTNET本地System.String.ConvertToAnsi功能,因为它不能映射Unicode字符的到来。并且因为文件目录名称是其他机器上的Unicode字符,所以它引发异常。

相关问题