我是C的初学者,我正在做一个项目,我需要打开一个目录作为参数并访问其中的每个文件,检查它们上的一些东西并编辑它们并收集文本文件中的结果。但是,当我尝试通过while循环访问每个文件时,open()函数没有按预期工作。以下是相关代码:
DIR *folder;
struct dirent *entry;
folder = opendir(argv[1]);
if(folder == NULL){
perror("Unable to read directory or directory doesn't exist");
exit(1);
}
if( (wfd=open("output.txt", O_WRONLY | O_CREAT, 0600)) == -1 ){
perror("open"); /*Creating the text file */
exit(EXIT_FAILURE);
}
close(wfd);
while( (entry=readdir(folder)) ){
fd=open(entry->d_name, O_RDONLY);
if(fd == -1 ){
perror("open1");
exit(EXIT_FAILURE);
}
/*opening and reading the file*/
bytes=read(fd,buf,sizeof(buf));
printf("%d bytes were read n", bytes);
close(fd);
buf[bytes]=' ';
.
. /*Rest of the code where I check edit and write the results in the outfile.txt*/
.
}
所以你可以理解
fd=open(entry->d_name, O_RDONLY);
部分失败,随后出现错误消息&;open1: No such file or directory&;。我知道open()函数需要一个const* char,比如文件名的确切名称"filename.txt"但当我不知道我正在处理的目录的内容时,我应该如何做到这一点?我尝试将条目->d_name变量转换为像这样的字符变量:
char entryName[255];
strncpy(entryName, entry->d_name, 254);
entryName[254]=' ';
和
fd=open(entryName, O_RDONLY);
,但我得到相同的错误。是我遗漏了什么,还是应该以另一种方式实现?
除非您已经将chdir()
ed到目标目录中,否则您不能只执行fd=open(entry->d_name, O_RDONLY);
并期望在那里打开entry->d_name
。您可能需要使用fd = openat(dirfd(folder), entry->d_name, O_RDONLY)
。