代码改变世界

读取指定目录下文件-- ---LIST+递归。(跳出结构思想。利用数据结构思路+程序写出更简单的逻辑。)

  沐海  阅读(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);  }   }
    }
}
编辑推荐:
· 如何编写易于单元测试的代码
· 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的设计模式综述
记录生活、工作、学习点滴!
E-Mail:mahaisong@hotmail.com 欢迎大家讨论。
沐海博客园,我有一颗,卓越的心!
点击右上角即可分享
微信分享提示