2011-05-21 102 views
0

我目前有代码来遍历我的计算机上的文件,虽然我试图挂钩Button.Click事件来执行此操作,我将如何做到这一点?输出到哪里去?下面C#迭代通过文件帮助

代码:

using System; 
using System.IO; 
using System.Collections; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void textBox1_TextChanged(object sender, EventArgs e) 
     { 

     } 

     private void button1_Click(object sender, EventArgs e) 
     { 

     } 
    } 
} 


public class FileSystemList : IEnumerable<string> 
{ 
    DirectoryInfo rootDirectory; 

    public FileSystemList(string root) 
    { 
     rootDirectory = new DirectoryInfo(root); 
    } 

    public IEnumerator<string> GetEnumerator() 
    { 
     return ProcessDirectory(rootDirectory).GetEnumerator(); 
    } 

    public IEnumerable<string> ProcessDirectory(DirectoryInfo dir) 
    { 
     yield return dir.FullName; 
     foreach (FileInfo file in dir.EnumerateFiles()) 
      yield return file.FullName; 
     foreach (DirectoryInfo subdir in dir.EnumerateDirectories()) 
      foreach (string result in ProcessDirectory(subdir)) 
       yield return result; 
    } 

    IEnumerator IEnumerable.GetEnumerator() 
    { 
     return GetEnumerator(); 
    } 
} 

回答

0

您需要实例化一个对象FileSystemList在您的按钮单击事件处理程序,叫你需要它的方法(一foreach循环似乎有可能)。

至于结果 - 把输出放在你想要的地方。它就像你的程序员一样,希望它去。

var list = new FileSystemList(pathIWantToList); 
foreach(var item in list) 
{ 
    // do something 
} 
+0

你能举个例子吗? – James 2011-05-21 18:57:55

1

如果你有.NET 4.0,你可以使用Directory.EnumerateFiles为自己节省很多麻烦。

+0

这是我最喜欢的;它被懒惰地评估,所以你可以使用LINQ扩展来过滤你的心脏的愿望 – sehe 2011-05-21 21:38:54