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