2016-12-02 118 views
1

在我的程序中,我有一个treeview和一个folderbrowser和一个datagridview。用户使用文件夹浏览器来选择一个文件夹,其中包含一系列季节不同的节目。我的程序在树状视图中显示演示文件夹和季节文件夹,每次从树状视图中选择一个文件夹时,我希望它显示该文件夹内的所有文件。我currectly使用此代码:如何获取文件夹内的所有文件?

public void fileProcessDirectory(string targetDirectory, string Name) 
    { 

     string[] fileEntries = Directory.GetFiles(targetDirectory); 
     foreach (string fileName in fileEntries) 
     { 
      FileProcessFile(fileName); 
     } 
     string[] subdirectoryEntries = Directory.GetDirectories(targetDirectory); 
     foreach (string subdirectory in subdirectoryEntries) 
     { 
      fileProcessDirectory(subdirectory, Name); 
      break; 
     } 

    } 
    public void FileProcessFile(string path) 
    { 
     dataGridView.Rows.Add(path, "New"); 
    } 

它表明我有第一子文件夹内的文件。它用来显示所有文件夹内的所有文件,所以我添加了一个中断,现在它显示前3个文件并停在那里。所以我希望它显示所选子文件夹内的文件而不是所有的子文件夹。

+1

你有子文件夹中的文件吗? – mybirthname

+0

它显示了哪些文件? “。”,“..”? –

+0

@mybirthname是的我有一个文件夹为每个节目,然后每个节目有一个文件夹里面的季节,然后文件都在子文件夹(季节) – melika

回答

1

你可以试试修改你的功能为:

public void FileProcessDirectory(string targetDirectory, string subfolder) 
{ 
    // this adds files 
    foreach (string fileName in Directory.GetFiles(targetDirectory)) 
    { 
     FileProcessFile(fileName); 
    } 

    // if we pass subfolder as empty then nothing happens 
    if(string.IsNullOrEmpty(subfolder)) return; 
    // here we find our subfolder and display files for it   
    FileProcessDirectory(Directory.GetDirectories(targetDirectory).Where(d => d == targetDirectory + "\\" + subfolder).ToArray()[0], null); 
} 

而且ussage例如:

FileProcessDirectory(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "Debug"); 
+0

我得到这个错误:无法与适用[]索引到类型为“IEnumerable的” – melika

+0

@melika接着说:.ToArray()'的表达,现在应该现在的工作 –

+0

我听到报告说指数为边界之外在运行时另一个错误数组 – melika

-1

SearchOption.AllDirectories

覆盖目标文件夹

SearchOption.TopDirectoryOnly下的所有文件夹的文件

名单:仅在目标文件夹中的文件

System.IO.Directory.GetFiles(@"C:\Music", "*", SearchOption.AllDirectories); 
+0

请不要发布裸露的代码,也请提供解释代码的作用。 –

0

请纠正我的理解,如果我错了: 用户选择文件夹,然后在树形视图中选择赛季那么他们就应该在数据网格视图查看所有里面的文件,对吗?

我这样

treeView1.NodeMouseDoubleClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick); 

实施,如果在树节点用户双击它显示了内部数据网格的所有文件:

void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) 
    { 
     if (treeView1.SelectedNode != null) 
     { 
      dataGridView1.Rows.Clear(); 
      string[] fileEntries = System.IO.Directory.GetFiles(treeView1.SelectedNode.Text); 
      foreach (string fileName in fileEntries) 
      { 

       dataGridView1.Rows.Add(Path.GetFileName(fileName)); 
      } 
     } 
    } 

我想这个问题之前,或许由引起dataGrid没有清除旧文件。希望能帮助到你。

相关问题