遍历文件夹结果存为数组

遍历文件夹中所有文件的方法(原创)     最近研究了一下遍历文件的问题,写了一个遍历文件夹的方法,然后又改进了一下,不过觉得效率不是很高,希望能有更好一点的方法。下面把源代码给大家分享一下:

using System; using System.Collections.Generic; using System.Text; using System.IO; //开始之前先using前面这些命名空间 //下面写一下具体的实现方法 public FileInfo[] GetFilelist(string filePath)//返回文件列表,filePath为根目录路径 {     int filecounts = 0;//定义一个变量,表示文件数目     FileInfo[] NewFileInfo;//定义一个数组,储存找到的文件并作为返回值     DirectoryInfo FatherDirectory = new DirectoryInfo(filePath); //创建一个当前目录的实例     NewFileInfo = FatherDirectory.GetFiles("*.txt", SearchOption.AllDirectories);     //得到文件集,包括目录及其子目录下的所有txt文件,如果用"*.*"就可以获得全部文件了     //为了得到其他类型的文件,又写了下面的语句     AddNewArray<FileInfo>(ref NewFileInfo, FatherDirectory.GetFiles("*.mp3", SearchOption.AllDirectories)); //把另一个查询记录并入到这个文件列表里     return NewFileInfo;//返回文件列表 } //下面是一个合并数组的方法     private void AddNewArray<T>(ref T[] A, T[] B)//合并数组,运用了一个范型,具体作用见下文         {             T[] A1;             A1 = (T[])A.Clone();             A = new T[A1.GetLength(0) + B.GetLength(0)];             for (int i = 0; i < A1.GetLength(0); i++)             {                 A[i] = A1[i];             }             for (int i = 0; i < B.GetLength(0); i++)             {                 A[i + A1.GetLength(0)] = B[i];             }         }         就是这么简单了,上文的代码直接返回了FileInfo类型的数组,也可一自己建立一个文件类,用来保护文件信息。下面是使用递归的方法进行遍历,不过效率要低些,是我一开始写的,下面也帖出来,大家可以参考一下。其中ClMyFile是自己建立的一个文件类,可以根据具体情况增减需要的属性,因为和具体遍历过程无关,省略其代码:

public ClMyFile[] GetFilelist(string filePath)         {             int filecounts = 0;//文件数目             int dircounts = 0;//目录中一级子文件夹的数量

            DirectoryInfo[] ChildDirectory;//当前所有的一级子目录             FileInfo[] NewFileInfo;//当前目录下所有文件(不包含子目录中的文件)                        DirectoryInfo FatherDirectory = new DirectoryInfo(filePath); //初始化当前目录             ChildDirectory = FatherDirectory.GetDirectories("*.*"); //得到子目录集             NewFileInfo = FatherDirectory.GetFiles("*.txt");//得到文件集,不包括子目录中的文件             AddNewArray<FileInfo>(ref NewFileInfo, FatherDirectory.GetFiles("*.mp3", SearchOption.AllDirectories));             //加入另一个查询记录,和上面的方法差不多                         filecounts = NewFileInfo.GetLength(0);//获得当前目录下文件的数量,用来初始化文件数组长度             dircounts = ChildDirectory.GetLength(0);    //获取文件数量

            //××××××××××获得目录下的文件和文件夹列表××××××

            ClMyFile[] myfilelist = new ClMyFile[filecounts];//初始化一个自定义类的数组,存储得到的文件列表                         for (int i = 0; i < filecounts; i++)             {                 myfilelist[i] = new ClMyFile();//实例化数组中的对象                 myfilelist[i] = GiveMyFileInfo(NewFileInfo[i]);//使用自定义的方法GiveMyFileInfo导入信息             }

            for (int i = 0; i < dircounts; i++)             //此处对文件夹下面的子文件夹进行递归遍历,并且加入到列表中,因为都是合并数组的操作             //但是数组类型不一样,所以AddNewArray方法用了一个范型,呵呵             //这里的操作非常消耗资源啊。             {

                AddNewArray<ClMyFile>(ref myfilelist, GetFilelist(filePath + "\\" + ChildDirectory[i]));             }             //××××××××××××××××××××××××××××

            //获得所选目录及其子目录下的所有文件

         return myfilelist;

        }

posted @ 2014-05-07 16:33  x_window  阅读(460)  评论(0)    收藏  举报