【问题标题】:c# Cannot get list of subdirectoriesc#无法获取子目录列表
【发布时间】:2011-04-22 05:19:02
【问题描述】:

我在网上看到过这段代码(和类似的),但我就是无法让它工作。每当我逐行调试它时,它就会中断调试并加载应用程序。不显示任何错误消息,并且“故障”行之后的任何代码都未处理。

这是有问题的代码:

foreach (string folder in allFolders)
{
    string[] subFolders = Directory.GetDirectories(folder, 
        "*", SearchOption.AllDirectories);
    MessageBox.Show("Test");
}

进入了foreach循环,但是消息框从不显示。

如果我删除了SearchOption.AllDirectories,则代码会成功处理,但我需要一些方法来将所有子目录包含在目录中。

有什么想法吗?

【问题讨论】:

  • 你试过调试这段代码了吗? string[] 被填满了吗?
  • 您能否提供一个完整的可执行程序(带有Main 方法)来说明这个问题?

标签: c# winforms io directory


【解决方案1】:

您的代码对我来说很好用。
在我看来,这个方法调用只需要很多时间来执行。例如,如果 allFolders 中有根目录,则必须等待几分钟(取决于您的系统参数)。您是否在只有几个嵌套目录的目录上检查了此代码 sn-p?
我假设,您在 winforms 中工作并且执行只是没有到达 MessageBox.Show 调用。

【讨论】:

  • 谢谢,我感觉这就是问题所在。我在一个只有少量文件夹的文件夹上尝试了它,它似乎有效。我猜我的原始文件夹中的子文件夹比我想象的要多!
  • 虽然离开了几分钟,消息框仍然不显示。是否有可能由于大量子文件夹,此代码将永远无法工作(尽管没有产生错误)?
  • 我认为这不可能。您应该考虑到此方法可能需要很长时间才能执行。只是为了比较执行时间:尝试使用此通配符掩码从根目录运行您的操作系统嵌入式搜索,并查看此搜索运行多长时间。
【解决方案2】:

MessageBox.Show不工作,因为你的代码是在web环境下,而MessageBox在winform中使用。通常我们使用 javascript 来弹出一个消息框,例如alert('hi').

【讨论】:

  • 你怎么知道提问者的代码是在web环境下的?
  • @MAKKAM:肯定是这样,因为他调试了代码,进入了循环,但是MessageBox现在可以正常工作了。可能他正在调试一个 Web 应用程序。
  • “如果我删除 SearchOption.AllDirectories 代码会成功处理,但我需要一些方法来包含目录中的所有子目录。”怎么样?
  • 是的,正如 Kobi 所说,提问者可以从他的代码中显示消息框。
【解决方案3】:

测试了你的代码,它工作正常,所以问题可能出在代码的其他地方,也可能是权限问题,虽然它发生时会返回异常,但 MSGBOX 也显示正常。

        List<string> allFolders = new List<string>();
        allFolders.Add(@"C:\joomla\");

        foreach (string folder in allFolders)
        {
            string[] subFolders = Directory.GetDirectories(folder, "*", SearchOption.AllDirectories);
            MessageBox.Show("Test");
        }

【讨论】:

    猜你喜欢
    • 2017-01-18
    • 2013-11-18
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多