2017-03-18 2 views
1

かなりストレートです。ボタンを押し、ダイアログボックスからパスを選択し、パスのサブディレクトリを検索し、それらをメッセージボックスに表示します。しかし、いくつかの問題に遭遇しました。この小さな(おそらく単純な)DirectoryInfo構文エラーを修正する方法を教えてください。

private void InputButton_Click(object sender, RoutedEventArgs e) 
{ 

    //CHECKS TO SEE IF "OK" WAS CLICKED IN DIALOGBOX 
    if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
    { 

    } 

    //SELECTS DIRECTORY PATH 
    Path.GetDirectoryName(fbd.SelectedPath); 
    string path = Path.GetDirectoryName(fbd.SelectedPath); 
    InputDirectory_Box.Text = path; 

    //SELECTS SUBDIRECTORIES FROM PATH 
    string[] subdirectories = DirectoryInfo.GetDirectories(path); 
    for (int i = 0; subdirectories.Length+1 >= 0; i++) 
    { 
     MessageBox.Show(subdirectories[i]); 
    } 


} 

ラインstring[] subdirectories = DirectoryInfo.GetDirectories(path);は、それが非静的フィールドのオブジェクト参照を必要と述べています。私はすでにそれを検索する文字列を与えるpathを宣言しました。私はディレクトリクラス(DirectoryInfoクラスではない)のコードと構文とまったく同じ行を使用しており、合法的でした。しかし、Directory.GetDirectoriesを使用しているときに問題が発生していました。何らかの理由でsubdirectoriesの代わりに親のというディレクトリが見つかりました。

誰にいくつかの光を当てることができれば:
A - あなたはなぜそれがパスからではなくサブディレクトリの

を親ディレクトリを返していましたでしょう - なぜ私はこの構文エラー
Bを取得していますヒーローになる。多くのありがとう

PS私は完全にプログラミングに慣れていて、列挙/列挙はまだかなりわかりません。もしそれが何か関係があれば、私は小さな例かそれとも何らかの文脈を感謝するでしょうです。

答えて

1

GetDirectoriesはインスタンスメソッドです。それを使用するには、DirectoryInfoのインスタンスが必要です。

string path = fbd.SelectedPath; 

// Make a reference to a directory. 
DirectoryInfo di = new DirectoryInfo(path); 

// Get a reference to each directory in that directory. 
string[] subdirectories = di.GetDirectories(); 
0

静的クラスはDirectory

Directory.GetDirectories(path); 

になり、これらの2つのラインの最初は役に立たない...

Path.GetDirectoryName(fbd.SelectedPath); 
string path = Path.GetDirectoryName(fbd.SelectedPath); 

次のものです:私はそのループを理解していません... Length+1>=0で何を達成したいですか? リスト/配列のすべてのディレクトリを印刷するには、forループのいずれか、またはインデックスが不要な場合はforeachループの2つの選択肢があります。これらの例で

ルック:

string[] subdirectories = Directory.GetDirectories(path); 
    for (int i = 0; i < subdirectories.Length; i++) 
    { 
     MessageBox.Show(subdirectories[i]); 
    } 

    string[] subdirectories = Directory.GetDirectories(path); 
    foreach (string directory in subdirectories) 
    { 
     MessageBox.Show(directory); 
    } 

は、このことができます願っています。

+0

読み込み中に、配列の末尾からlength-1までのインデックスを後方にインデックスできることを学びました。長さ+ 1が配列の始点になると私は考えました。 コードを書き直していただきありがとうございます。しかし、私はまた、DirectoryInfoクラスの使い方を理解しようとしています。具体的には、DirectoryInfo.GetDirectoriesはDirectoriesクラスとは異なります。私は誰かがこれに答えたと思う。インスタンス化する必要があります。 – Aspen