【问题标题】:c# recursion folders and files directoryc#递归文件夹和文件目录
【发布时间】:2012-02-13 16:52:40
【问题描述】:

我正在尝试检索目录中所有文件夹中的所有文件。

但结果是相当随机的..

我认为 foreach 是错误的..

我不明白为什么?

因为在所有文件夹中,我们检查所有文件,然后显示所有文件的链接按钮。但实际上它显示了很多文件夹,两次。

 var DI = new DirectoryInfo("C://inetpub//wwwroot//ClientPortal//Files//")
              .GetDirectories("*.*", System.IO.SearchOption.AllDirectories);

 foreach (System.IO.DirectoryInfo D1 in DI)
 {
     System.IO.FileInfo[] fiArr = D1.GetFiles();

     foreach (System.IO.FileInfo file in fiArr)
     {
         LinkButton lktest = new LinkButton();
         lktest.Text = D1.Name;
         form1.Controls.Add(lktest);
         form1.Controls.Add(new LiteralControl("<br>"));
     }
 }

有人可以帮助我吗?

非常感谢!

【问题讨论】:

  • 假设您可以附加调试器,这种事情应该很容易调试......只需一步一步地运行,每次添加新控件时检查工作找出你是否得到了正确的价值,如果没有,事情不是你所期望的......

标签: c# asp.net directory


【解决方案1】:

显示所有文件的链接按钮

在这里,您正在创建链接按钮,名称设置为目录,而听起来您需要文件(即 file.Name 而不是 D1.Name)

lktest.Text = D1.Name;

【讨论】:

    【解决方案2】:

    这有帮助吗?

    http://www.dreamincode.net/code/snippet1669.htm

    public void GetDirStructure(string path)
    {
        try
        {
            DirectoryInfo dir = new DirectoryInfo(path);
            DirectoryInfo[] subDirs = dir.GetDirectories();
            FileInfo[] files = dir.GetFiles();
            foreach(FileInfo fi in files)
            {
                Console.WriteLine(fi.FullName.ToString());
            }
    
            if (subDirs != null)
            {
                foreach (DirectoryInfo sd in subDirs)
                {
                    GetDirStructure(path + @"\\" + sd.Name);
                }
            }
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message.ToString());
        }
    }
    

    【讨论】:

      【解决方案3】:

      第一行代码好像是罪魁祸首:

      System.IO.DirectoryInfo[] DI = new System.IO.DirectoryInfo("C://inetpub//wwwroot//ClientPortal//Files//").GetDirectories("*.*", System.IO.SearchOption.AllDirectories);
      

      尝试使用以下方法:

      DirectoryInfo[] DI = new DirectoryInfo("C://inetpub//wwwroot//ClientPortal//File//").GetDirectories();
      

      【讨论】:

      • 重点是使用DirectoryInfo.GetDirectories()方法的正确重载。
      • 但是为什么一个 OP 使用错误而你的建议是正确的?
      • 因为不需要指定搜索条件。看看不同的方法重载here