随笔 - 170  文章 - 0  评论 - 16  阅读 - 35908 

#include <stdio.h>
#include <iostream>
#include <vector>

struct file_info_t
{
  unsigned long long ud_tm;
  unsigned int file_len;
  std::string file_name;
};

unsigned long long get_curr_time()
{
  time_t now;
  time(&now);
  return now;
}

void scan_disk_files(char* path, std::vector<struct file_info_t>& dst, std::vector<string>& vdirs, int& file_numbs)
{
  DIR *d = NULL;
  struct dirent *dp = NULL;
  struct stat st,lst;
  char p[1024] = {0};
  int ret;
  char *dumpstr = "/";
  char *ch = "";
  char tmp[1024];
  int rlen;

  if (path[0] == 0)
  {
    return ;
  }

  if (path[strlen(path) - 1] == '/')
  {
    //ch = "";
  }else {
    ch = dumpstr;
  }

  memset((void *)&st, 0, sizeof(st));
  if(stat(path, &st) < 0 || !S_ISDIR(st.st_mode)) {
    return;
  }

  if(!(d = opendir(path))) {
    return;
  }

   usleep(1);

  while((dp = readdir(d)) != NULL) {
    if((!strncmp(dp->d_name, ".", 1)) || (!strncmp(dp->d_name, "..", 2)))
      continue;

    memset(p, 0, 1024);
    snprintf(p, sizeof(p) - 1, "%s%s%s", path, ch, dp->d_name);

    memset((void *)&st, 0, sizeof(st));
    memset((void *)&lst, 0, sizeof(st));

    ret = stat(p, &st);
    lstat(p, &lst);

    rlen = snprintf(tmp, 1024, "%s%s%s",path, ch, dp->d_name);
    if(!S_ISLNK(lst.st_mode) && S_ISREG(st.st_mode))
    {
      struct file_info_t ft;
      ft.ud_tm = st.st_mtime;
      ft.file_len = st.st_size;
      ft.file_name = tmp;

      dst.push_back(ft);
      file_numbs++;
      memset(tmp, 0, rlen);
    } else if(!S_ISLNK(lst.st_mode) && S_ISDIR(st.st_mode)){
      //microsecond(2);
      vdirs.push_back(tmp);
      scan_disk_files(p, dst, vdirs, file_numbs);
    }
  }

  closedir(d);
  return;
}

int main(int argc, char *argv[])
{

  std::vector<struct file_info_t> vfiles;
  std::vector<std::string> vdirs;
  int m_dwFileTotalNum = 0;
  char *g_scan_path = "/";

  printf("\n Start scan disk time:%llu \n", get_curr_time());
  scan_disk_files(g_scan_path, vfiles, vdirs, m_dwFileTotalNum);

  std::vector<struct file_info_t>::iterator it = vfiles.begin();
  printf("\n file list\n\n");
  for(; it != vfiles.end(); it++)
  {
    printf("create time:%lld, length:%d, name: %s\n", (*it).ud_tm, (*it).file_len, (*it).file_name.c_str());
  }
  printf("\n");

  printf("\n End scan disk time:%llu \n scan files:%d \n", get_curr_time(), m_dwFileTotalNum);

  return 0;
}

posted on   北京开发  阅读(346)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示