当前位置:  技术问答>linux和unix

求助,遍历目录中所有文件的代码分析

    来源: 互联网  发布时间:2016-07-18

    本文导语:  如下代码, 希望罗列出pszBaseDir目录下的所有文件。 这些文件都是普通的文本文件。         struct dirent* ent = NULL;         DIR *pDir;         struct stat statbuf;         if( (pDir=opendir(pszBaseDir)) == NULL...

如下代码,
希望罗列出pszBaseDir目录下的所有文件。
这些文件都是普通的文本文件。

        struct dirent* ent = NULL;
        DIR *pDir;
        struct stat statbuf;

        if( (pDir=opendir(pszBaseDir)) == NULL)
        {
                printf("open dir %s failedn", pszBaseDir);
                return false;
        }

        while( (ent=readdir(pDir)) != NULL )
        {
                if(ent->d_reclen == 24) //
                {
                        if(ent->d_type == 8) //文件,结果列出的不全!
                        {
                                string strFilePath = strDir;
                                strFilePath += ent->d_name;
                                vFiles.push_back(strFilePath); //将文件名放入容器中
                        }
                        else 
                        {
                                string strSubDir = strDir;
                                strSubDir += ent->d_name;
                        }
                }
                else if(ent->d_reclen == 16) //
                {

                }
        }

        closedir(pDir);


但,上述代码的结果是,
列出的文件不全!
而且似乎跟文件名有关(改一下文件名就能列出)。

请教,该如何正确罗列出目录下的文件。
谢谢!!

|
我觉得是if(ent->d_reclen == 24)使输出的文件不全,我试了一下,各种长度的都有,普通文件也可以有不同的dirent结构长度,所以去掉这个条件应该就能列全了

|
struct dirent {
               ino_t          d_ino;       /* inode number */
               off_t          d_off;       /* offset to the next dirent */
               unsigned short d_reclen;    /* length of this record */
               unsigned char  d_type;      /* type of file; not supported
                                              by all file system types */
               char           d_name[256]; /* filename */
           };

d_reclen就是dirent结构的长度.你想d_name不同,自然结构长度就不同,我的上面
 是先对d_name的长度进行4字节补齐,然后加上12,就算d_reclen,所以d_reclen
一般是根据文件名长度变化而变化的,但都是4的倍数.

|
不知怎么的,DEV-C++竟然说我的struct dirent没有d_type成员!
我在windows下写的,测试通过,功能只是打印文件名(根据你说的没有二级目录,所以就没有考虑文件夹的情况),希望对你有帮助~

#include 
#include 

void printdir(char *dir)
{
    DIR *dp;
    struct dirent *entry;
    if((dp = opendir(dir)) == NULL) {
        printf("cannot open directory: %sn", dir);
        return;
    }
    chdir(dir);
    while((entry = readdir(dp)) != NULL) {
        printf("%sn",entry->d_name);
   }
   closedir(dp);
}

int main()
{
    printf("Files are :n");
    printdir("D:\mulu");//D盘根目录下有mulu文件夹
    printf("done.n");
    exit(0);
}

|


while((ent = readdir(dir))!=NULL)
{
     printf(“d_name: %sn”,ent->d_name);
}






    
 
 

您可能感兴趣的文章:

  • 求助大家帮忙编写linux遍历进程程序
  • 求助 如何遍历一个文件的内容?并且将结果中 第一列名字相同的内容的各个字段做相加工作
  • 求助:遍历目录
  • 求助 ==> 代码移殖:从Linux到的Windows,请高手指点一二,谢谢啦
  • 求助:linux的源代码怎么才可以看见?
  • 求助:如何调出linux下kppp源代码?
  • 求助 程序中添加互斥锁代码后编译怎么通不过 ?
  • 100分求助 能不能提供一些有关图像分割的算法和实现代码!谢谢
  • 求助:snort源代码
  • 各位师哥师姐,我急切求助,关于文件的上传下载程序代码
  • 求助:Linux下ftp客户端代码编写
  • 求助如何顺利的阅读linux内核源代码
  • 求助:能给出一个在jsp里调用ActiveX控件的代码吗?
  • 求助java聊天室、公告栏、记数器、email的源代码
  • 【求助】一小段perl代码~谢谢
  • 求助!!关于两行代码的理解问题!请大虾近来看看!!(在线等待)
  • 求助!!关于两行代码的理解问题!请大虾近来看看!!
  • 数据库 iis7站长之家
  • 求助:LINUX内核代码中# 与define之间有空格是怎么回事?
  • 【求助】快来人呐~!大家帮我看看我写的破代码哈!
  • 求助: 一段非常奇怪的代码( 关于fcntl文件锁 )
  • 求助: 用shell 给某个目录下所有.c文件的第一个#include<**>前面加几行代码
  • 急求助:linux下ftp客户端代码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求助,在Linux下当文件夹大小超过1G时,删除文件夹内容
  • MAKEFILE求助,LINUX下如何将多个.a文件合并为一个.a文件或者.lib文件
  • 求助~~急~如何删除指定目录下的文件夹???(不是文件)
  • 求助关于zip命令,如何把文件压缩成指定大小的多个文件(Ubuntu7.04)
  • 求助!如何在没有图形界面的LINUX下压缩文件夹,并将这个压缩文件在windows下解压?
  • 求助文件操作中修改文件中字段的问题,请大家帮忙解决
  • [求助]修改文件内容
  • socket实现多文件并发传输,求助多线程实现问题?
  • 高分求助实例!!!!定期删除文件!!!!!
  • 高分求助!!!!定期删除文件!!!!!
  • 求助,linux中修改了目录dir下的某个文件,相应的dir属性中的时间会与修改目录下文件的时间一致,这是怎么实现的?
  • 求助!!用NFS传送文件显示乱码是怎么回事
  • 紧急求助:Unix下给文件夹重命名用什么命令?谢谢!!!!
  • 求助 请问vxworks支持inet_ntoa函数吗? 需要包含哪些头文件? 谢谢
  • 紧急求助!!!用CHKDSK/F检查磁盘,结果C盘下所有的文件的文件长度都变为0字节
  • 救命啊,AIX小机,我想删除一个10G的文件,我先移动到根目录下,然后rm 文件名后,用df -g发现空间没有变化?求助啊!
  • 求助 shell中split命令如何实现文件分割 并统计分割文件个数。分割完之后,命名方式从 文件名.001 开始
  • 求助,关于开发板的linux文件问题!
  • 求助:系统为什么会自动删除文件?
  • 求助!找不到头文件
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 怎样读取HZK24S前十区的内容啊???求助求助
  • 紧急求助!紧急求助!
  • 【求助】iplanet问题,求助高手解答!
  • 菜鸟求助,solaris下计算问题求助
  • 【求助】SOS紧急求助..............极为简单的问题...跪求....
  • 高分求助啊!求助SUSE 10.0 不能上网.
  • 急急急急急急急啊,紧急求助啊!!!!!满分求助啊!!!!!!
  • 求助:linux下 vim的配置(高分求助)
  • red hat怎么安装gcc啊!总是出错,求助求助啊!!!yum源怎么改啊!!
  • 求助~~求助 ~~linux文件读写问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3