2017-06-20 4 views
1

.net winformsアプリケーションの同じコードが次の例外を除いて他のマシンでクラッシュしている間に自分のマシンで動作しています。SevenZip.SevenZipExtractorコンストラクタが他のマシンでエラーをスローする

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

Myfile.7zは 代わりに、このダイアログボックスのジャストインタイム(JIT)デバッグを呼び出すための詳細については、このメッセージの最後を参照してくださいUnicodeテキスト

といくつかのテキストファイルを持っています。

System.ArgumentException:マーシャリングできません:マップされていない文字が見つかりました。 System.String.ConvertToAnsi(バイト* pbNativeBuffer、のInt32 cbNativeBuffer、ブールfBestFit、ブールfThrowOnUnmappableChar)SevenZip.NativeMethods.LoadLibraryでSystem.StubHelpers.CSTRMarshaler.ConvertToNativeで (のInt32フラグ、文字列strManaged、のIntPtr pNativeBuffer) (文字列filenameで )SevenZip.SevenZipExtractor..ctorでSevenZip.SevenZipExtractor.Init(文字列archiveFullName) でSevenZip.SevenZipLibraryManager.LoadLibrary(対象ユーザ、列挙形式) (文字列archiveFullName、文字列のパスワード) でAlMadinaLibrary.Packages.Packager.GetFileObjectで[T](String dibx、String fileName) at TestFile.Form1.LoadDropdownList()

+0

両方のマシンで全く同じ7z(zip形式)ファイルでテストしましたか? – mjwills

+0

SevenZipExtractorの最初のパラメータは、完全修飾パス(例: '@" C:\ Test.7z ")です。あなたはそれを試しましたか? – mjwills

答えて

2

ファイルパスにUnicode文字が含まれていた問題がありました。

私のローカルマシンでは、私のパスはc:\data\myFile.7zでしたが、他のマシンではc:\میرا ڈیٹا\myFile.7zでした。

SevenZipは、ネイティブ7z.dllファイルのラッパーです。ネイティブの7z.dllをベース機能として呼び出します。

例外は、ドットネットのネイティブSystem.String.ConvertToAnsi関数から来ており、Unicode文字をマップできないためです。そして、ファイルディレクトリ名が他のマシンのUnicode文字であったため、例外がスローされました。

関連する問題