gpt4 book ai didi

c - 读取所选目录中的 txt 文件

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:08 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>

int main (void)
{
DIR *dp;
struct dirent *ep;
dp = opendir ("./");

if (dp != NULL)
{
while (ep = readdir (dp))
puts (ep->d_name);

(void) closedir (dp);
}
else
perror ("Couldn't open the directory");

return 0;
}

此代码为我提供了该目录中的所有内容。它像“ls”命令一样工作。例如,假设我在该目录中有一个名为“folder”的文件夹和一个名为“input”的 .txt 文件(顺便说一句,名称可能不同)。我想判断是文件夹还是txt文件,如果是txt文件怎么读?

最佳答案

]您可以使用scandir() 函数打开并扫描目录中的条目。

例子来自man 3 scandir

#define _SVID_SOURCE
/* print files in current directory in reverse order */
#include <dirent.h>

int
main(void)
{
struct dirent **namelist;
int n;

n = scandir(".", &namelist, NULL, alphasort);
if (n < 0)
perror("scandir");
else {
while (n--) {
printf("%s\n", namelist[n]->d_name);
free(namelist[n]);
}
free(namelist);
}
}

注意struct 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_type 字段检查当前条目是常规文件、目录还是其他。

可用的文件类型是:

#define DT_UNKNOWN       0
#define DT_FIFO 1
#define DT_CHR 2
#define DT_DIR 4 // directory type
#define DT_BLK 6
#define DT_REG 8 // regular file, txt file is a regular file
#define DT_LNK 10
#define DT_SOCK 12
#define DT_WHT 14

检查文件的名称和类型后,您可以使用open()(系统调用)或fopen()(glib 函数)安全地打开它并读取read() 的内容(如果您通过 open() 或 fread()(fopen() 对应物)打开文件。

不要忘记在阅读后关闭文件。

此外,如果你只是想检查一个目录的存在性和可访问性,access() 就是句柄。

下面的代码测试目录是否存在。

int exist_dir (const char *dir)
{
DIR *dirptr;

if (access(dir, F_OK) != -1) {
// file exists
if ((dirptr = opendir(dir)) != NULL) {
// do something here
closedir (dirptr);
} else {
// dir exists, but not a directory
return -1;
}
} else {
// dir does not exist
return -1;
}

return 0;
}

关于c - 读取所选目录中的 txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41244598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com