问题描述
c++如何查找一个文件目录下所有文件?
问题解答
回答1:#include <dirent.h>#include <stdio.h>#include <string.h>int main() { struct dirent *ent = NULL; DIR *dir = opendir('/tmp'); if (dir != NULL) {while ((ent = readdir (dir)) != NULL) { if (strcmp(ent->d_name, '.') != 0 && strcmp(ent->d_name, '..') != 0) {printf('%sn', ent->d_name); }}closedir(dir);return 0; } else {printf('Failed to open directoryn');return -1; }}回答2:
给一个windows下的实现:
#include <cstdio>#include <cstdlib>#include <cstring>#include <windows.h>#include 'io.h'using namespace std;char path[1000];int len_path=0;void get_info(){ path[len_path]=’*’,path[len_path+1]=’0’; _finddatai64_t fileinfo; intptr_t handle=_findfirsti64(path,&fileinfo); if(handle==-1) return; while(!_findnexti64(handle,&fileinfo)) {char *name=fileinfo.name;if(strcmp(name,'.')==0||strcmp(name,'..')==0) continue;if(fileinfo.attrib&_A_SUBDIR)//递归子目录{ int n=strlen(name); memcpy(path+len_path,name,n),len_path+=n; path[len_path++]=’’; get_info(); len_path-=n+1;}else puts(fileinfo.name); } _findclose(handle);}int main(){ strcpy(path,'D:'); len_path=strlen(path); get_info();}回答3:
我以前也写过这个:district10/FindFilesWithinFolder: Find and generate a file list of the folder.。
效果:
➜ build git:(master) ✗ ./FindFilesWithinFolder CMakeFilesCMakeFiles/CMakeDirectoryInformation.cmakeCMakeFiles/Makefile2CMakeFiles/progress.marksCMakeFiles/TargetDirectories.txtCMakeFiles/Makefile.cmakeCMakeFiles/cmake.check_cacheCMakeFiles/CMakeOutput.logCMakeFiles/3.0.2/CMakeDetermineCompilerABI_CXX.binCMakeFiles/3.0.2/CMakeCCompiler.cmakeCMakeFiles/3.0.2/CMakeDetermineCompilerABI_C.binCMakeFiles/3.0.2/CMakeSystem.cmakeCMakeFiles/3.0.2/CMakeCXXCompiler.cmakeCMakeFiles/FindFilesWithinFolder.dir/link.txtCMakeFiles/FindFilesWithinFolder.dir/main.cpp.oCMakeFiles/FindFilesWithinFolder.dir/CXX.includecacheCMakeFiles/FindFilesWithinFolder.dir/cmake_clean.cmakeCMakeFiles/FindFilesWithinFolder.dir/DependInfo.cmakeCMakeFiles/FindFilesWithinFolder.dir/FindFiles.cpp.oCMakeFiles/FindFilesWithinFolder.dir/depend.makeCMakeFiles/FindFilesWithinFolder.dir/depend.internalCMakeFiles/FindFilesWithinFolder.dir/progress.makeCMakeFiles/FindFilesWithinFolder.dir/build.makeCMakeFiles/FindFilesWithinFolder.dir/flags.makeCMakeFiles/3.0.2/CompilerIdC/a.outCMakeFiles/3.0.2/CompilerIdC/CMakeCCompilerId.cCMakeFiles/3.0.2/CompilerIdCXX/CMakeCXXCompilerId.cppCMakeFiles/3.0.2/CompilerIdCXX/a.out