win和linux遍历文件夹

linux

  1. 介绍
    参考链接
    https://blog.csdn.net/qq_34935373/article/details/92829877
    在linux中,一般上用的是dirent这个库的。用到的一些API有这几个
  • opendir
  • readdir
  1. 代码示例
#include <stdio.h>
#include <dirent.h>
int main(int argc,char *argv[])
{
    if (argc < 2) {
        printf("usage: \n\t%s dir\n", argv[0]);
        return -1;
    }
    DIR *dp = opendir(argv[1]);
    if (!dp) {
        perror("open dir failed");
        return -1;
    }
    struct dirent *filename;
    while (filename = readdir(dp)) {
        printf("[%s] %s\n",
            (filename->d_type == DT_DIR)?"dir ":"file", filename->d_name);
    }
    closedir(dp);
    return 0;
}
  1. 分析
    DIR 结构体保存了目录的相关信息,dirent结构体保存了文件的信息。
    下面是dirent结构体的定义。详细的信息可以参考dirent.h。
struct dirent
  {
#ifndef __USE_FILE_OFFSET64
    __ino_t d_ino;
    __off_t d_off;
#else
    __ino64_t d_ino;
    __off64_t d_off;
#endif
    unsigned short int d_reclen;
    unsigned char d_type;
    char d_name[256];       /* We must not include limits.h! */
  };

windows

下面的链接可以给出一些思考
https://segmentfault.com/q/1010000002494724

  1. 介绍
    在windows下,我们可以用io这个库。用这个库获取文件只需要用这个结果函数即可
  • _findfirst
  • _findnext
  • _findclose
  1. 代码示例
    下面是一个简单的例子:
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
int main()
{
    //用通配符
    char path[256] = "E:\\mycodeblock\\*";
    long hFile = 0;
    struct _finddata_t fileInfo;
    if ((hFile = _findfirst(path, &fileInfo)) == -1) {
            printf("findfirst failed!\n");
        return -1;
    }
    do {
        //文件或者文件夹
        printf("[%s] file name: %s\n",
            fileInfo.attrib & _A_SUBDIR ? "folder" : "file", fileInfo.name);
    } while (_findnext(hFile, &fileInfo) == 0);
    _findclose(hFile);
    return 0;
}
  1. 分析
    上面的代码不长,也很好理解。主要是struct _finddata_t 这个结构体,在io.h中是这样定义的
struct _finddata_t
{
    unsigned    attrib;     /* Attributes, see constants above. */
    time_t      time_create;
    time_t      time_access;    /* always midnight local time */
    time_t      time_write;
    _fsize_t    size;
    char        name[FILENAME_MAX]; /* may include spaces. */
};

在例子中用了1. attrib,用来判断文件还是文件夹。2. name,用来获取文件名字。
其他的信息我们也可以在需要的时候使用。

总结

这几天在网上找windows和linux上可以通用的方法,但是网上说的通用方法并没有在本地实现,所以就分开windows和linux分别介绍了一种方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chasentech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值