读书人

怎么实现读取一个目录下所有匹配特定名

发布时间: 2012-03-15 11:50:39 作者: rapoo

如何实现读取一个目录下所有匹配特定名字格式的文件,代码最好能跨平台(windows,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,分别调用不同的函数实现。

读书人网 >C++

热点推荐