2017-06-20 60 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字符,所以它引發異常。

相關問題