gpt4 book ai didi

c - 使用dirent循环c中目录中的html文件

转载 作者:行者123 更新时间:2023-11-30 14:22:55 26 4
gpt4 key购买 nike

我正在尝试用 c 语言编写一个程序,该程序接受一个目录并循环访问该目录中的文件。我计划对文件进行一些处理并以新名称重新保存它们。我使用 dirent 结构来获取目录内容,但是当我尝试从 dirent 中获取 FILE * 时,出现了问题。

 1 #include <unistd.h>
2 #include <sys/types.h>
3 #include <dirent.h>
4 #include <stdio.h>
5 #include <string.h>
6 #include <sys/fcntl.h>
7 #include <stdlib.h>
8 #include <sys/stat.h>
9 #include <errno.h>
13 char parentName[256];
14
15 void listdir(const char *name, int level)
16 {
17 DIR *dir;
18 struct dirent *entry;
19
20 if (!(dir = opendir(name)))
21 return;
22 if (!(entry = readdir(dir))){
23 closedir(dir);
24 return;
25 }
26
27 do {
28 if (entry->d_type == DT_DIR) {
29 printf("Don't give me a directory!!");
30 }
31 else{
32 FILE *thisFile;
33 if(!(thisFile = fopen(entry->d_name, "r"))){
34 printf("Error");
35 }
36 struct stat buf0;
37 fstat(fileno(thisFile), &buf0);
38 off_t size = buf0.st_size;
39 printf("size = %d\n",(int) size);
40 printf("Made it here first");
41 char *buf1 = (char*) malloc(101);
42 printf("Made it here");
43 fgets(buf1,100,thisFile);
55 printf("%s",buf1);
56 }
57 } while ((entry = readdir(dir)));
58 closedir(dir);
59 }
60
61 int main(int argc, char* argv[])
62 {
63 if (argc == 0) listdir(".", 0);
64 else listdir((char*)argv[1],0);
65 return 0;
66 }

程序输出

大小 = 12292
段错误:11

如果我删除第 39 行,它就会出现段错误。 (此外,该大小与文件的字节、字符或单词大小并不接近。)请帮忙,谢谢!

:)

编辑:包括#includes

最佳答案

我发现三个问题:

    当您不提供参数时,
  1. argc 是 1 而不是 0。因此,将 main() 更改为:

    if (argc == 1) listdir(".", 0);

  2. fopen() 失败时,您仍会尝试处理该文件。添加 else继续循环:

    if(!(thisFile = fopen(entry->d_name, "r"))){
    printf("错误");
    继续;
    }

  3. 您出现内存泄漏。您分配了 buf1,但从未free() 它。

关于c - 使用dirent循环c中目录中的html文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13374545/

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