linux
- 介绍
参考链接
https://blog.csdn.net/qq_34935373/article/details/92829877
在linux中,一般上用的是dirent这个库的。用到的一些API有这几个
- opendir
- readdir
- 代码示例
#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;
}
- 分析
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
- 介绍
在windows下,我们可以用io这个库。用这个库获取文件只需要用这个结果函数即可
- _findfirst
- _findnext
- _findclose
- 代码示例
下面是一个简单的例子:
#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;
}
- 分析
上面的代码不长,也很好理解。主要是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分别介绍了一种方法。