首页 | 互联网 | IT动态 | 网络设备 | 服务器 | IDC | 安全 | Cisco | Windows | Linux | Java | .Net | Oracle | CIW | 华为 | 专题
IT技术 | 网页设计 | 平面设计 | 电子书下载 | 教学视频 | 方案 | 数字网校 | 直播室 | 虚拟考场 | 面授培训 | 搜索 | 博客 | 沙龙 | 论坛
首页 | JAVA | C# | VB | VB.NET | C/C++ | delphi | 工程管理 | 其他语言 | 论坛
免费注册一站通帐号,参与直播、论坛、下载、博客、网摘、评论,展现我的风采!
您现在的位置: 中国IT实验室 >> 桌面开发 >> 其他语言 >> 文章正文
用语言递归遍历某一路径下的所有文件
来源:中国IT实验室整理  时间:2007-4-7

  递归遍历某一路径下的所有文件
  
  在windows下,可以使用FindFirstFile和FindNextFile来实现。
  
  而在Linux下,则可以使用opendir和readdir来实现。
  
  具体实现见下面两个函数,分别实现了打印某一路径下的所有文件,包括子目录下的文件。在具体实现的时候需要注意设置路径。
  
  注:
  
  下面两个程序都通过编译通过,且正常执行。
  windows下使用VC6.0编译;
  Linux下使用gcc 3.4.3编译。
  
  //for windows
  void findAllFile(char * pFilePath)
  {
  
  WIN32_FIND_DATA FindFileData;
  HANDLE hFind = INVALID_HANDLE_VALUE;
  char DirSpec[MAX_PATH + 1]; // directory specification
  DWORD dwError;
  
  strncpy (DirSpec, pFilePath, strlen(pFilePath) + 1);
  SetCurrentDirectory(pFilePath);
  strncat (DirSpec, "\\*", 3);
  
  hFind = FindFirstFile(DirSpec, &FindFileData);
  
  if (hFind == INVALID_HANDLE_VALUE)
  {
  printf ("Invalid file handle. Error is %u\n", GetLastError());
  return ;
  }
  else
  {
  if (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY )
  {
  printf ("  %s\n", FindFileData.cFileName);
  }
  else if(FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY
  && strcmp(FindFileData.cFileName, ".") != 0
  && strcmp(FindFileData.cFileName, "..") != 0)
  {
  char Dir[MAX_PATH + 1];
  strcpy(Dir, pFilePath);
  strncat(Dir, "\\", 2);
  strcat(Dir, FindFileData.cFileName);
  
  findAllFile(Dir);
  }
  
  while (FindNextFile(hFind, &FindFileData) != 0)
  {
  if (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY)
  {
  printf ("  %s\n", FindFileData.cFileName);
  }
  else if(FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY
  && strcmp(FindFileData.cFileName, ".") != 0
  && strcmp(FindFileData.cFileName, "..") != 0)
  {
  char Dir[MAX_PATH + 1];
  strcpy(Dir, pFilePath);
  strncat(Dir, "\\", 2);
  strcat(Dir, FindFileData.cFileName);
  findAllFile(Dir);
  }
  
  }
  
  dwError = GetLastError();
  FindClose(hFind);
  if (dwError != ERROR_NO_MORE_FILES)
  {
  printf ("FindNextFile error. Error is %u\n", dwError);
  return;
  }
  }
  }
  
  //for linux
  void findAllFile(char * pFilePath)
  {
  DIR * dir;
  dirent * ptr;
  struct stat stStatBuf;
  chdir(pFilePath);
  dir = opendir(pFilePath);
  while ((ptr = readdir(dir)) != NULL)
  {
  if (stat(ptr->d_name, &stStatBuf) == -1)
  {
  printf("Get the stat error on file:%s\n", ptr->d_name);
  continue;
  }
  if ((stStatBuf.st_mode & S_IFDIR) && strcmp(ptr->d_name, ".") != 0
  && strcmp(ptr->d_name, "..") != 0)
  {
  char Path[MAX_PATH];
  strcpy(Path, pFilePath);
  strncat(Path, "/", 1);
  strcat(Path, ptr->d_name);
  findAllFile(Path);
  }
  if (stStatBuf.st_mode & S_IFREG)
  {
  printf(" %s\n", ptr->d_name);
  }
  //this must change the directory , for maybe changed in the recured
  
  function
  chdir(pFilePath);
  }
  closedir(dir);
  }

【责编:Lili】

中国IT教育热线咨询

相关文章
如何用Delphi实现子目录级的文件查询
用纯JAVA语言编程读取MAC地址的实现
探讨Java与Ruby语言迁移时的安全性
C#处理C文件
在 VB.NET 中检索文件信息
统一建模语言UML简介
强大的Delphi RTTI--兼谈需要了解多种开…
强大的Delphi RTTI--兼谈需要了解多种开…
推荐文章
· 用C#创建COM对象
· IT管理十大失误及其对策
· VC中利用MFC设计绘图程序初步
· JAVA中对象创建和初始化过程
· C语言中的位域的使用
· 浅谈Java桌面应用程序开发
· C#的前途如何?
· 几种VC++数据库开发技术的相对比较
 精彩友情推荐
·锐捷交换机报价
·锐捷交换机
·锐捷网络网络交换机
·smc交换机
·smc交换机报价
·IDC资讯大全
·机房品质万里行
·IDC托管必备知识
·全国IDC报价
·网站推广优化
最新更新 推荐文章
·Visual Basic 9.0隐式类型的局部…09-30
·JMX+J2SE5.0实现Web应用的安全管…09-30
·多线程、Socket技术及委托技术的…09-21
·Visual C#多线程参数传递浅析09-21
·浅谈Java中利用JCOM实现仿Excel编…09-21
·基于Java的界面布局DSL的设计与实…09-21
·Java开发中的事件驱动模型实例详…09-21
·并发工程原则应用到软件项目中09-06
·Delphi初学者应小心的六大陷阱09-06
·VC开发多语言界面支持的简单方法09-06
·用C#创建COM对象09-06
·用C#创建COM对象09-06
·IT管理十大失误及其对策08-30
·VC中利用MFC设计绘图程序初步08-23
·JAVA中对象创建和初始化过程08-23
·C语言中的位域的使用08-09
·浅谈Java桌面应用程序开发08-09
·C#的前途如何?08-02
·几种VC++数据库开发技术的相对比较07-12
·用Visual C#实现网络封包监视07-12
·VB.NET中的TextBox控件详解07-12
·VB.NET实现PC与掌上电脑PPC的双向通信07-05
  培训中心