linux下的文件扫描程序

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 12:41 点击:

 不错,值得借鉴:
直接上代码了,这个比较容易理解。

原代码有点问题,而且注释说的path也不一定为全目录,相对目录亦可。

修改后在ubuntu 10.10上跑过,没问题。

#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
#include <string>
#include <vector>
#include <iostream>
using namespace std;
 
/***************************************************
*作者   : 潘际勇
*功能   : 扫描目录中所有文件, 并加入strvec中.
*path   : 目录, 全路径. 如/home, /home/
*strvec : 调用前,将strvec置空.strvec将被填充
*返回值 : 返回 0, 成功执行; 返回 -1, 失败
***************************************************/
int
scan_allfile (const char *path, vector <string> &strvec)
{
  DIR *dp;          //目录流
  struct dirent *entry;     //目录项信息
  struct stat statbuf;
 
//打开目录, 判断目录是否存在
  if ((dp = opendir (path)) == 0)
    {
      fprintf (stderr, "open dir failed\n");
      return -1;
    }
 
//读取目录信息
  while ((entry = readdir (dp)) != 0)
    {
      //忽略 . ..目录
      if (!strcmp (entry->d_name, ".") || !strcmp (entry->d_name, ".."))
    {
      continue;
    }
 
      //获取扫描到的文件的信息, 如果路径中没有'/', 则加'/', 加入strvec
      //不管是目录,还是文件,都将被加进去.
      //tmp_path是一个全路径
      string tmp_path (path);
      if (*(tmp_path.end () - 1) != '/')
    tmp_path += '/';
      tmp_path += entry->d_name;
      strvec.push_back (tmp_path);
 
      //如果是目录, 递归的扫描
      if (entry->d_type == 4)
    {
      scan_allfile (tmp_path.c_str (), strvec);
    }
      else
    {
      //do nothing
    }
    }
  closedir (dp);
  return 0;
}
 
int
main ()
{
  char *path = new char[255];
  cin >> path;
  vector < string > strvec;
 
  scan_allfile (path, strvec);
 
//输出, 测试扫描是否正确
  for (vector < string >::iterator iter = strvec.begin ();
       iter != strvec.end (); ++iter)
    cout << *iter << endl;
 
  delete[]path;
  path = 0;
  return 0;
}

作者“風聲”

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • /etc/fstab 详解
      • nginx主主集群
      •  LVS-NAT和LVS-DR模式的实现详解
      •  RHCE考试之磁盘配额
      • 学习笔记:ACL详解
      •  LVM逻辑卷管理器
      • suse linux双网卡双网关配置
      •  Nginx主主负载均衡架构
      • ubuntu学习Mysql

      快速直达

      操作系统导航

      LinuxWindows虚拟机
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1