.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()
答案 0 :(得分:2)
问题是文件路径有Unicode字符。
在我的本地计算机中,我的路径为c:\data\myFile.7z
,而在其他计算机上则为c:\میرا ڈیٹا\myFile.7z
。
SevenZip是原生7z.dll
文件的dotnet包装器,它调用本机7z.dll
作为基本功能。
异常来自dotnet native System.String.ConvertToAnsi
函数,因为它无法映射Unicode字符。并且因为文件目录名在其他机器上的Unicode字符中,所以它抛出异常。