2012-02-20 15 views
1

ベースディレクトリにあるファイル(たとえば、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には次のファイル拡張子がないことですが、それはフォルダなので、とにかくそれを持つべきではありません。

誰も私が間違っていたこととその修正方法を教えてもらえますか?

+0

デバッガを使用して、どのオブジェクト(DestFlder、items)がnullであるか調べることはできますか?そして、あなたのためにシェルを作成することは興味深い問題ですが、unzipライブラリを使用するのが最も簡単かもしれません。 SharpZipLib – Rup

+0

DestFlderがnullとして表示され、「このオブジェクトの詳細情報が見つかりませんでした」というエラーレポートが表示されます。まあ20はintなので、これは問題になるはずです:D – TheBW

+1

+ = "\" + "\\"を持つコードは、zip = currentdir + "\\" + "sampleに定義されています。 zip "; // zipファイルへのパスおそらく追加の" \ "デバッグを追加し、探しているものが次の文字列にあることを確認しますcurrentdir = Directory.GetCurrentDirectory(); //現在のディレクトリを取得します string zip = currentdir + "\\" + "sample.zip"; // zipファイルへのパスおそらくいくつかのパスの問題があります。 – MethodMan

答えて

1

この問題への答えはむしろ...簡単でしたが、最も単純な問題のすべてとして、考えるのは不可能でした。

フォルダが存在せず、そのために参照できませんでした。

 if (!Directory.Exists(args[1])) 
      Directory.CreateDirectory(args[1]); 

汝DJ KRAZEが、それはおそらく最終的には実行時エラーを取得する可能性があり、スクリプトで別の問題にポイントをした:このコード片があること、固定します。有難うございます!

関連する問題