2010-10-07 53 views
0

我已经看到了这个代码(以及类似的)所有网站上的名单,但我不能得到它的工作。每当我一行一行地调试它时,它就会打破调试并加载应用程序。不会显示错误消息,并且“错误”行后的任何代码仍未处理。C#中无法获得子目录

这里是有问题的代码:

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

foreach循环订立,但永远不会显示消息框。

如果我删除SearchOption.AllDirectories代码处理成功,但我需要一些方法,包括所有子目录内的目录。

任何想法?

+0

您是否尝试过调试此代码?字符串[]是否被填充? – Younes 2010-10-07 07:19:48

+0

你能提供一个完整的,可执行的程序(用'Main'方法)来说明这个问题吗? – 2010-10-07 07:34:01

回答

1

你的代码适合我。
在我看来,这种方法调用只需要很多时间来执行。例如,如果在所有文件夹中存在根目录,则必须等待几分钟(取决于您的系统参数)。你有没有在只有少数几个嵌套目录的目录上检查这个代码片段?
我认为,你在winforms中工作并且执行没有达到MessageBox.Show调用。

+1

谢谢,我有一种感觉是这个问题。我在一个只有少量文件夹的文件夹上试过它,它似乎工作。我想我的原始文件夹中有更多的子文件夹比我想象的要多! – 2010-10-07 07:38:36

+0

即使离开它几分钟后,消息框仍然不显示。是否有可能因为大量的子文件夹,此代码永远不会工作(尽管不会产生错误)? – 2010-10-07 07:44:14

+0

我不认为这是可能的。您应该考虑到此方法可能需要很长时间才能执行。只是比较执行时间:尝试使用此通配符掩码从根目录运行操作系统嵌入式搜索并查看该搜索运行多长时间。 – 2010-10-07 08:08:13

1

MessageBox.Show不能正常工作,因为你的代码是网络环境下的,而MessageBox在WinForm的使用。通常我们使用javascript弹出消息框,例如alert('hi')

+0

你是怎么知道提问者的代码是在web环境下的? – 2010-10-07 07:24:50

+0

我怀疑受过教育的猜测。 – 2010-10-07 07:26:56

+0

@MAKKAM:它必须是,因为他调试了代码,进入了循环,但是'MessageBox'现在没有任何异常。可能他正在调试一个Web应用程序。 – 2010-10-07 07:29:11

0

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

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