Cadina 发表于 2006-12-8 20:40:55

用的标准的C的库?

leesoft 发表于 2006-12-8 20:43:48

不推荐用带_的函数
还是用api吧

JAY 发表于 2006-12-8 21:41:54

我还确实不清楚是不是标准C库里面的,而且这一系列的函数都是以“_”开头的。

Eastsun 发表于 2006-12-8 22:52:08

来个JAVA版本的吧,支持正则式:

import java.io.*;
import java.util.regex.*;
/**
*@author Eastsun
*@version 1.0 12/8/2006
*/
public class SearchFile{
   /**
   *@param dir 搜索进行的根目录
   *@param p 文件名匹配的模式
   *@param out 负责输出搜索结果PrintStream
   */
   public static int searchFile(File dir,Pattern p,PrintStream out)throws IOException{
      int count =0;
      if(dir.isDirectory()){
      File[] list =dir.listFiles();
      if(list==null) return 0;
      for(int n=0;n<list.length;n++){
         if(list.isDirectory()) count +=searchFile(list,p,out);
         else if(p.matcher(list.getName()).matches()){
            out.println(list.getCanonicalPath());
            count++;
         }
      }
      }
      return count;
   }
   public static void main(String[] args)throws IOException{
      File root =null;                        
      Pattern p =null;                  
      PrintStream out =null;            
      
      if(args.length==3){
      root =new File(args);            //搜索的根目录
      p =Pattern.compile(args);         //匹配模式
      out =new PrintStream(new File(args));   //将搜索结果保存到文件名为args的文件中
      }
      else{
      root =new File("e:\\");      //搜索的根目录为e:盘
      p = Pattern.compile(".*\\.lav");//搜索所有的lav文件
      out =System.out;            //直接在控制台上显示搜索结果
      }
      System.out.println("Searching..");
      int count =searchFile(root,p,out);
      System.out.println("Find "+count+" files");
   }
}

Eastsun 发表于 2006-12-8 22:55:40

匹配所有文件名的正则式是: Pattern p =Pattern.compile(".+");

JAY 发表于 2006-12-9 00:35:17

递归啊递归,不过感觉listFile函数有些无耻...

Eastsun 发表于 2006-12-9 13:08:08

LZ的代码貌似只把C盘根目录下的文件打印出来,而不是把C盘所有的文件打印出来?

JAY 发表于 2006-12-10 11:02:32

对,我说了是C盘根目录的,没有子目录的递归。

kael 发表于 2006-12-21 18:09:29

JAY,一进来,第一眼就看到你了!

我还是第一次来这里,但是却一下载看到好多熟悉的名字,Lee(leesoft就是Lee本人吗?),FantasyDR,LOJA,曾半仙,任我狂
又记起当初的文曲星年代了,响起当时天天上课扒在桌子上汇编,LAVA的情景了~

顶个~

leesoft 发表于 2006-12-21 18:34:21

leesoft就是Lee
这里不让注册Lee,真不爽

kael 发表于 2006-12-21 18:52:15

--||原来还有这么一回事。。。。。。

JAY 发表于 2006-12-8 19:25:39

遍历指定目录下文件名

使用_findfirst, _findnext, _findclose三个函数可以遍历指定目录下的所有文件,然后通过判断文件的属性(文档,目录,系统,只读,隐藏,普通)来进行相应的操作,下面这个代码就可以打印出C盘根目录下的所有文件。

#include <stdio.h>
#include <io.h>

void main()
{
   intptr_t findHandle; // 查找文件句柄
   char fileSpec[] = "C:\\*.*"; // 查找文件条件
   struct _finddata_t fileInfo; // 文件信息

   findHandle = _findfirst(fileSpec, &fileInfo); // 开始查找
   if (findHandle != -1) // 找到文件
   {
      printf("Files found below:\n");
      do
      {
         if (fileInfo.attrib & _A_ARCH) // 如果是文档,输出文件名
      {
            printf("%s\n", fileInfo.name);
      }
      }while(_findnext(findHandle, &fileInfo) != -1); // 查找下一个文件
   }
   else
   {
      printf("No file found\n"); // 没有找到任何文件
   }
   _findclose(findHandle); // 关闭查找
}
页: [1]
查看完整版本: 遍历指定目录下文件名