文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>linux下的文件扫描程序(转载)

linux下的文件扫描程序(转载)

时间:2011-03-20  来源:晓彻

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

#include<sys/types.h>
#include<dirent.h>
#include<sys/stat.h>
#include<unistd.h>
#include<stdio.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;
}
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载