读取指定目录下文件-- ---LIST+递归。(跳出结构思想。利用数据结构思路+程序写出更简单的逻辑。)
2011-10-04 17:15 沐海 阅读(443) 评论(0) 编辑 收藏 举报由于初次接触。而且是想开发自己使用的工具。效率上没有怎么考虑。
——————————————————————————————————————————————————
谈谈自己的思路:
先说说我的错误思路:最开始一接手做一个文档。需要把代码都整理到一个WORD里面。我就想。
第一步:应该把所有的规定好的文件名都得到。
第二部:应该用word控件;
于是我就开始想。第一步得到所有的文件名。 但是文件根目录下包含很多不同的文件和目录,那么是不是利用栈来考虑,把搜索过的文件弹出栈。后来又想目录结构不是个树吗?于是又去看二叉树。看完二叉树,发现这丫是一个多叉树。多叉树的生成 我又不会写。而且多叉树的查找也要再转换成二叉树(森林转二叉树),转换过程中还要使用平衡二叉树的知识。这些我都会。可是写成代码可真难为我了。以后再加深吧。
想破脑袋,又一想。本来它就是个栈或者链表。我就递归就是了。又不是考试。写明了不能递归。 于是。就借鉴网上一段程序。用LIST列表+递归的方式来实现查找目录
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 CopyToWord { public partial class Form1 : Form { FolderBrowserDialog folderBrowserDialog1= new FolderBrowserDialog (); OpenFileDialog openFileDialog1= new OpenFileDialog (); bool folderDefine = false ; private List<FileInfo> list = new List<FileInfo>(); //文件的集合 public Form1() { InitializeComponent(); } private void button1_Click( object sender, EventArgs e) { folderBrowserDialog1.RootFolder = Environment.SpecialFolder.MyComputer; //此对象的根目录必须是特殊的枚举目录 DialogResult result = folderBrowserDialog1.ShowDialog(); if (result==DialogResult.OK){ openFileDialog1.InitialDirectory = folderBrowserDialog1.SelectedPath; //文件的根目录是 用户选择的文件夹路径 textBox1.Text = folderBrowserDialog1.SelectedPath; start.Visible = true ; } //OpenFileDialog openFileDialog1 = new OpenFileDialog(); //openFileDialog1.InitialDirectory = "E:\\";//初始的文件路径 //openFileDialog1.Filter = ".net file (*.cs;*.js;*.aspx;*.aspx.cs;*.aspx.designer.cs;*.ashx)|*cs;*.aspx;*.aspx.cs;*.aspx.designer.cs;*.ashx;*.js"; ////初始的文件类型后缀名 //openFileDialog1.FilterIndex = 1;//索引默认为1 //openFileDialog1.RestoreDirectory = true; //if (openFileDialog1.ShowDialog() == DialogResult.OK) { // try { // } // catch { } //} } private void start_Click( object sender, EventArgs e) { state.Text = "读入中……" ; Application.DoEvents(); FindFile(textBox1.Text); foreach (FileInfo f in list) { Console.WriteLine(f.FullName.ToString()); } state.Text = "完毕!" ; Application.DoEvents(); Console.WriteLine( "共输出" + list.Count.ToString()+ "个文件" ); } public void FindFile( string dir) //参数为指定的目录 { DirectoryInfo Dir = new DirectoryInfo(dir); foreach (FileInfo f in Dir.GetFiles( "*.cs" )) //查找文件 { list.Add( new FileInfo(Dir + f.ToString())); //listBox1中填加文件名 } foreach (FileInfo f in Dir.GetFiles( "*.aspx" )) //查找文件 { list.Add( new FileInfo(Dir + f.ToString())); //listBox1中填加文件名 } foreach (FileInfo f in Dir.GetFiles( "*.aspx.cs" )) //查找文件 { list.Add( new FileInfo(Dir + f.ToString())); //listBox1中填加文件名 } foreach (FileInfo f in Dir.GetFiles( "*.aspx.designer.cs" )) //查找文件 { list.Add( new FileInfo(Dir + f.ToString())); //listBox1中填加文件名 } foreach (FileInfo f in Dir.GetFiles( "*.ashx" )) //查找文件 { list.Add( new FileInfo(Dir + f.ToString())); //listBox1中填加文件名 } foreach (FileInfo f in Dir.GetFiles( "*.js" )) //查找文件 { list.Add( new FileInfo(Dir + f.ToString())); //listBox1中填加文件名 } //C#读取文件夹在指定目录及子目录下查找文件,在listBox1中列出子目录及文件 try { foreach (DirectoryInfo d in Dir.GetDirectories()) //查找子目录 { FindFile(Dir + "\\" + d.ToString()); // listBox1.Items.Add(Dir+d.ToString()+"\\"); //listBox1中填加目录名 } } catch (Exception e) { MessageBox.Show(e.Message); } } } } |
本人声明:
个人主页:沐海(http://www.cnblogs.com/mahaisong)
以上文章都是经过本人设计实践和阅读其他文档得出。如果需要探讨或指教可以留言或加我QQ!欢迎交流!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述