ベースディレクトリにあるファイル(たとえば、sample.zip)を解凍する必要があります。私はそうするためのサンプルアプリケーションを作った。私は1つの入力パラメータ - 宛先ディレクトリを持っています。ここでは、コードのサンプルです:シェルを使用してzipファイルを解凍する際に、引数エラーが発生する
private void BInstall_Click(object sender, EventArgs e)
{
string currentdir = Directory.GetCurrentDirectory();//Gets current directory
string zip = currentdir + "\\" + "sample.zip";//Path to zip file
string outPath = TBoutputPath.Text;
exctract(zip ,outPath);
}
そしてここでは、zipファイルを解凍することになっている機能は次のとおりです。
DestFlder.CopyHere(items , 20);
で
void exctract(string name, string path)
{
string[] args = new string[2];
if (name.IndexOf(" ") != -1)
{
//we got a space in the path so wrap it in double qoutes
args[0] += "\"" + name + "\"";
}
else
{
args[0] += name;
}
if (path.IndexOf(" ") != -1)
{
//we got a space in the path so wrap it in double qoutes
args[1] += " " + "\"" + path + "\"";
}
else
{
args[1] +=path;
}
Shell32.Shell sc = new Shell32.Shell();
Shell32.Folder SrcFlder = sc.NameSpace(args[0]);
Shell32.Folder DestFlder = sc.NameSpace(args[1]);
Shell32.FolderItems items = SrcFlder.Items();
DestFlder.CopyHere(items , 20);
}
私はとNullReferenceExceptionを取得し、私はなぜか、オブジェクトので、 nullにすることはできません。 DestFlderはnullです。 SrcFolderは初期化されていますが、DestFlderは初期化されていないようです。私が見つけることができる唯一の違いは、DestFlderには次のファイル拡張子がないことですが、それはフォルダなので、とにかくそれを持つべきではありません。
誰も私が間違っていたこととその修正方法を教えてもらえますか?
デバッガを使用して、どのオブジェクト(DestFlder、items)がnullであるか調べることはできますか?そして、あなたのためにシェルを作成することは興味深い問題ですが、unzipライブラリを使用するのが最も簡単かもしれません。 SharpZipLib – Rup
DestFlderがnullとして表示され、「このオブジェクトの詳細情報が見つかりませんでした」というエラーレポートが表示されます。まあ20はintなので、これは問題になるはずです:D – TheBW
+ = "\" + "\\"を持つコードは、zip = currentdir + "\\" + "sampleに定義されています。 zip "; // zipファイルへのパスおそらく追加の" \ "デバッグを追加し、探しているものが次の文字列にあることを確認しますcurrentdir = Directory.GetCurrentDirectory(); //現在のディレクトリを取得します string zip = currentdir + "\\" + "sample.zip"; // zipファイルへのパスおそらくいくつかのパスの問題があります。 – MethodMan