遍历文件夹结果存为数组
遍历文件夹中所有文件的方法(原创) 最近研究了一下遍历文件的问题,写了一个遍历文件夹的方法,然后又改进了一下,不过觉得效率不是很高,希望能有更好一点的方法。下面把源代码给大家分享一下:
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;
}

浙公网安备 33010602011771号