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


    由于初次接触。而且是想开发自己使用的工具。效率上没有怎么考虑。

    ——————————————————————————————————————————————————

    谈谈自己的思路:

    先说说我的错误思路:最开始一接手做一个文档。需要把代码都整理到一个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!欢迎交流!
  • 相关阅读:
    [LeetCode] 329. Longest Increasing Path in a Matrix
    [LeetCode] 1180. Count Substrings with Only One Distinct Letter
    [LeetCode] 1100. Find K-Length Substrings With No Repeated Characters
    [LeetCode] 312. Burst Balloons
    [LeetCode] 674. Longest Continuous Increasing Subsequence
    [LeetCode] 325. Maximum Size Subarray Sum Equals k
    [LeetCode] 904. Fruit Into Baskets
    [LeetCode] 68. Text Justification
    [LeetCode] 65. Valid Number
    [LeetCode] 785. Is Graph Bipartite?
  • 原文地址:https://www.cnblogs.com/mahaisong/p/2199015.html
Copyright © 2020-2023  润新知