windows和linux获取文件夹内容的一种方法

来源:互联网 发布:软件测试全程项目 编辑:程序博客网 时间:2024/06/04 20:07

windows:

使用头文件:<io.h>、<direct.h>

关键函数:_findfirst、_findnext

关键结构体:_finddata_t

_finddata_tfileinfo;intptr_t hFile;string root;root.assign(Path);//文件夹绝对路径int len = root.length();if ( !IsEndObliqueLine(Path) )//路径的结尾不是‘\’{root.append("\\");}root.append("*");//路径下的所有文件hFile = _findfirst(root.c_str(), &fileinfo);if ( -1 == hFile){assert(false);return;}strcpy(m_CurrentPath, Path);//保存到m_CurrentPath//清空之前Path的信息FilesPathVector.clear();//自定义的保存信息的容器do //保存信息{LISTCMD_INFO TmpDirInfo = {0};TransFileInfo(fileinfo, TmpDirInfo);FilesPathVector.push_back(TmpDirInfo);}while(_findnext(hFile, &fileinfo)   ==   0);

linux:

使用头文件: <dirent.h>、 <sys/types.h>、<sys/stat.h>

关键函数:readdir、lstat

关键结构体:dirent

DIR *dir;if ( !(dir = opendir(Path)) ){assert(false);return;}    strcpy(m_CurrentPath, Path);//保存到m_CurrentPathstruct dirent *d_ent;char fullpath[128];FilesPathVector.clear();while ( (d_ent = readdir(dir)) != NULL ){struct stat file_stat;//if ( strncmp(d_ent->d_name, ".", 1) == 0 )//{//continue;// 忽略"."目录//}memset(fullpath, '\0', sizeof(fullpath));strcpy( fullpath,  Path);if ( !strcmp(fullpath, "/") ){fullpath[0] = '\0';}strcat(fullpath, "/");strcat(fullpath, d_ent->d_name);if ( lstat(fullpath, &file_stat) < 0 ){assert(false);return;}//保存信息到自己的数据结构,在函数外面保存文件名LISTCMD_INFO TmpDirInfo = {0};strcpy(TmpDirInfo.cFileName, d_ent->d_name);TransFileInfo(&file_stat, TmpDirInfo);FilesPathVector.push_back(TmpDirInfo);}closedir(dir);


值得注意的是,此种方法windows的路径分隔是用'\',而linux用'/',使用时多少有点不便。

如果有其他更好得方法,欢迎交流!

原创粉丝点击