1

很直接。按一个按钮,从对话框中选择一个路径,搜索路径的子目录,并在消息框中显示它们。但是遇到了几个问题。

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给它要搜索的字符串。我对 Directory 类(不是类)使用了完全相同的代码和语法行,DirectoryInfo这是合法的。但是,我在使用时遇到了问题Directory.GetDirectories。由于某种原因,它正在寻找路径的目录而不是。subdirectories

如果有人可以阐明:
A - 为什么我会收到此语法错误
B - 为什么它返回父目录而不是路径中的子目录

那你就是英雄了。非常感谢

PS我对编程完全陌生,还不知道枚举/枚举是什么,所以如果它与此有关,我可能会很感激一个小例子或它的一些背景。

4

2 回答 2

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();
于 2017-03-18T05:48:32.980 回答
0

静态类是Directory

Directory.GetDirectories(path);

这两行中的第一行是无用的......

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

下一件事:我不明白那个循环......你想用什么来实现Length+1>=0?要打印出任何列表/数组的所有目录,您有两种选择:for循环,或者如果您不需要项目的索引,则更好的是foreach循环。

看看这些例子:

   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);
    }

希望这可以帮助。

于 2017-03-18T05:48:51.397 回答