怎么实现读取一个目录下所有匹配特定名字格式的文件,代码最好能跨平台(windows,linux)
如何实现读取一个目录下所有匹配特定名字格式的文件,代码最好能跨平台(windows,linux)
C/C++:
如何读取一个目录下所有的文件(最好能带文件名字匹配功能,比如,只读取后缀为txt的文件)
分别在windows(VC++)和linux下怎么实现?
可能做到不用修改代码的移植吗?(因为小弟还不太熟悉linux下面的编程环境,一直在用VC++,但是最后还得把程序弄到linux下面去)
------解决方案--------------------
C/C++:
如何读取一个目录下所有的文件(最好能带文件名字匹配功能,比如,只读取后缀为txt的文件)
分别在windows(VC++)和linux下怎么实现?
可能做到不用修改代码的移植吗?(因为小弟还不太熟悉linux下面的编程环境,一直在用VC++,但是最后还得把程序弄到linux下面去)
------解决方案--------------------
- C/C++ code
//Dev C++ 测试通过:利用链表实现目录内所有文件列表显示 #include <stdio.h> #include <dirent.h> /*#include <alloc.h>*/ #include <string.h> int main(int argc,char *argv[]) { DIR *directory_pointer; struct dirent *entry; struct FileList { char filename[64]; struct FileList *next; }start,*node; if (argc!=2) { printf("Must specify a directory\n"); exit(1); } if ((directory_pointer=opendir(argv[1]))==NULL) printf("Error opening %s\n",argv[1]); else { start.next=NULL; node=&start; while ((entry=readdir(directory_pointer))!=NULL) { node->next=(struct FileList *)malloc(sizeof(struct FileList)); node=node->next; strcpy(node->filename,entry->d_name); node->next=NULL; } closedir(directory_pointer); node=start.next; while(node) { printf("%s\n",node->filename); node=node->next; } } return 0; }
------解决方案--------------------
至于对文件名的过滤,那就非常简单,比如定义的规则是txt文件,那么可以比较filename的末尾四个字符是否是".txt"即可:
if( !strcmp(".txt", filename+strlen(filename)-strlen(".txt")) )
{...}
------解决方案--------------------
如果只是后缀的话,比较简单,如果是其他有通配符的表示的文件名,要用正则表达式了。
遍历目录用opendir函数,有个目录的结构体。这个是系统的函数,windows和linux有点不一样。可以把楼上的代码用宏来判断是windows还是linux,分别调用不同的函数实现。