zoukankan      html  css  js  c++  java
  • linux下的文件扫描程序(转载)

    直接上代码了,这个比较容易理解。

    原代码有点问题,而且注释说的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;
    }
    

    见图:

  • 相关阅读:
    使用node-inspector调试nodejs程序<nodejs>
    2015 2月记事(1)
    设置npm安装模块目录<nodejs>
    BZOJ 1965 [AHOI2005]洗牌
    BZOJ 1924 [Sdoi2010]所驼门王的宝藏
    【NOIP2003】传染病控制
    BZOJ [Scoi2015]情报传递
    [Noi2002]Savage
    BZOJ 4025: 二分图
    BZOJ 4999 This Problem Is Too Simple!
  • 原文地址:https://www.cnblogs.com/yixiaoyang/p/1989735.html
Copyright © 2011-2022 走看看