C# 如何获取指定目录包含的文件和子目录
如何获取指定目录包含的文件和子目录 DirectoryInfo GetFiles() 获取目录中(不包含子目录)的文件 返回类型为FileInfo[] 支持通配符查找 DirectoryInfo GetDirectories() 获取目录(不包含子目录)的子目录 返回类型为DirectoryInfo[] 支持通配符查找 DirectoryInfo GetFileSystemInfos() 获取指定目录下(不包含子目录)的文件和子目录 返回类型为FileSystemInfo[] 支持通配符查找 如何获取指定文件的基本信息 FileInfo Exists 获取指定文件是否存在 FileInfo Name FileInfo Extensioin 获取文件的名称和扩展名 FileInfo FullName 获取文件的全限定名称(完整路径) FileInfo Directory 获取文件所在目录 返回类型为DirectoryInfo FileInfo DirectoryName 获取文件所在目录的路径(完整路径) FileInfo Length 获取文件的大小(字节数) FileInfo IsReadOnly 获取文件是否只读 FileInfo Attributes 获取或设置指定文件的属性 返回类型为FileAttributes枚举 可以是多个值的组合 FileInfo CreationTime FileInfo LastAccessTime FileInfo LastWriteTime 分别用于获取文件的创建时间 访问时间 修改时间 遍历文件夹 文件夹是树形结构 遍历算法有 广度优先级和深度优先级 区别 广度首先查找同一层目录 深度首先遍历一条分支 有了这个区别 就可以确定链表的插入位置 即广度遍历插入点总在末尾 深度遍历插入点在首部 详细看代码 public static void searchFile(String path List<Object> resultList) { File file = new File(path); if (file isDirectory()) { LinkedList<File[]> levelLinked = new LinkedList<File[]>(); levelLinked add(file listFiles()); do { File[] childFiles = levelLinked remove( ); for (File cf : childFiles) { if (cf isDirectory()) { // 此处控制遍历的方向 levelLinked add(cf listFiles());// 广度 // levelLinked add( cf listFiles());//深度 } else { String fileName = cf getName();// 文件名 有后缀 String filePath = cf getAbsolutePath();// 绝对路径 String fileParent = cf getParent();// 上层路径 注意最后的 / // 比较算法 找到后放入集合 String[] sf = { fileName fileParent filePath }; resultList add(sf); } } } while (levelLinked size() > ); } } 此处加入一些API提供的工具类 希望有用 多后缀判断 如 java class js等 String[] hz = {java class js}; Arrays sort(hz);//下面的搜索需要排序 例如 class的顺序在java之前 如果不sort() class文件不会被查找 Arrays binarySearch(hz fn_);//fn_文件后缀 如果明确目录的层次结构简单 递归算法也是不错的选择 个人觉得 文件的搜索 应该单独起线程
//////////////////////// 采用递归的方式遍历 文件夹和子文件中的所有文件 public void FindFile(string dirPath) //参数dirPath为指定的目录 { //在指定目录及子目录下查找文件 在listBox 中列出子目录及文件 DirectoryInfo Dir=new DirectoryInfo(dirPath); try { foreach(DirectoryInfo d in Dir GetDirectories()//查找子目录 { FindFile(Dir+d ToString()+""); listBox Items Add(Dir+d ToString()+""); //listBox 中填加目录名 } foreach(FileInfo f in Dir GetFiles("* ")) //查找文件 { listBox Items Add(Dir+f ToString()); //listBox 中填加文件名 } } catch(Exception e) { MessageBox Show(e Message); }
}
用下面代码限制文件的类型 foreach(FileInfo f in Dir GetFiles("* ")) //查找文件
“* ”指要访问的文件的类型的扩展名 /////////////////////////////// 代码改成如下 会不会好一点
DirectoryInfo TheFolder=new DirectoryInfo(folderFullName);
DirectoryInfo[] dirInfo = TheFolder GetDirectories(); //遍历文件夹 foreach(DirectoryInfo NextFolder in dirInfo) this listBox Items Add(NextFolder Name);
lishixinzhi/Article/program/net/201311/14311