c#2005中遍历文件夹中所有文件的方法

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

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;

        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值