using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace picMaker { /// <summary> /// 变量定义的很混乱凑合看吧呵呵 /// 注意FileSystemInfo是DirectoryInfo和FileInfo的基类,这个很重要 /// 本程序模拟的是桌面文件的遍历,可以根据需要更改 /// 从效率上来说 :递归要稍强点 /// </summary> public partial class Form1 : Form { private Stack<FileSystemInfo> fileStack = new Stack<FileSystemInfo>(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) {//递归遍历 textBox1.Text = ""; DateTime d = DateTime.Now; getFilesName(new DirectoryInfo(@"C:\Users\pc2\Desktop"));//C:在win7下存在不可访问的文件夹 label1.Text = (DateTime.Now.Subtract(d).Ticks / 1000).ToString(); label1.Text += "微秒"; } private void button2_Click(object sender, EventArgs e) {//栈遍历 fileStack.Clear(); //初始化栈 fileStack.Push(new DirectoryInfo(@"C:\Users\pc2\Desktop")); textBox1.Text = ""; DateTime d = DateTime.Now; getFilesNameByStack(); label2.Text = (DateTime.Now.Subtract(d).Ticks / 1000).ToString(); label2.Text += "微秒"; } private void getFilesNameByStack() {//栈遍历 while (fileStack.Count != 0) { FileSystemInfo ff = fileStack.Pop(); FileInfo f = ff as FileInfo; if (f != null) { outFileName(f); } else { DirectoryInfo di = ff as DirectoryInfo; FileSystemInfo[] fsi = di.GetFileSystemInfos();//取得所有文件和文件夹 foreach (FileSystemInfo f0 in fsi) { fileStack.Push(f0); } } } } private void getFilesName(FileSystemInfo name) {//递归遍历 FileInfo f = name as FileInfo; if (f != null) {//是文件 outFileName(f); } else { //是文件夹 DirectoryInfo di = name as DirectoryInfo;//记得此处为name哦 FileSystemInfo[] fsi = di.GetFileSystemInfos();//取得所有文件和文件夹 foreach (FileSystemInfo ff in fsi) { FileInfo fff = ff as FileInfo; if (fff != null) { outFileName(fff); } else { getFilesName(ff);//此处为ff哦 } } } } private void outFileName(FileInfo f) { if (f.Name.Length > 4) { string s = f.Name.Substring(f.Name.Length - 4, 4); if (s == ".ini") { return; } } textBox1.Text += f.Name + "\r\n"; } } }