清泛IT社区

标题: VC/Linux C++ 递归访问目录下所有文件 [打印本页]

作者: 清泛网    时间: 2016-02-29 15:23
标题: VC/Linux C++ 递归访问目录下所有文件
VC函数,部分代码如下:
  1. find(char * lpPath)
  2. {
  3.     char szFind[MAX_PATH];
  4.     WIN32_FIND_DATA FindFileData;

  5.     strcpy(szFind,lpPath);
  6.     strcat(szFind,"\\*.*");

  7.     HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
  8.     if(INVALID_HANDLE_VALUE == hFind)    return;
  9.    
  10.     while(TRUE)
  11.     {
  12.         if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  13.         {
  14.             if(FindFileData.cFileName[0]!='.')
  15.             {
  16.                 strcpy(szFile,lpPath);
  17.                 strcat(szFile,"\");
  18.                 strcat(szFile,FindFileData.cFileName);
  19.                 find(szFile);
  20.             }
  21.         }
  22.         else
  23.         {
  24.             cout << FindFileData.cFileName;
  25.         }
  26.         if(!FindNextFile(hFind,&FindFileData))    break;
  27.     }
  28.     FindClose(hFind);
  29. }
复制代码

Linux C++实例如下:
  1. #include <dirent.h>
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <cstring>
  5. using namespace std;
  6. void GetFileInDir(string dirName)
  7. {
  8.     DIR* Dir = NULL;
  9.     struct dirent* file = NULL;
  10.     if (dirName[dirName.size()-1] != '/')
  11.     {
  12.         dirName += "/";
  13.     }
  14.     if ((Dir = opendir(dirName.c_str())) == NULL)
  15.     {
  16.         cerr << "Can't open Directory" << endl;
  17.         exit(1);
  18.     }
  19.     while (file = readdir(Dir))
  20.     {
  21.         //if the file is a normal file
  22.         if (file->d_type == DT_REG)
  23.         {
  24.             cout << dirName + file->d_name << endl;
  25.         }
  26.         //if the file is a directory
  27.         else if (file->d_type == DT_DIR && strcmp(file->d_name, ".") != 0 && strcmp(file->d_name, "..") != 0)
  28.         {
  29.             GetFileInDir(dirName + file->d_name);
  30.         }
  31.     }
  32. }
  33. int main(int argc, char* argv[])
  34. {
  35.     if (argc < 2)
  36.     {
  37.         cerr << "Need Directory" << endl;
  38.         exit(1);
  39.     }
  40.     string dir = argv[1];
  41.     GetFileInDir(dir);
  42. }
复制代码






欢迎光临 清泛IT社区 (https://bbs.tsingfun.com/) Powered by Discuz! X3.3