我想在c中編寫一個程序,它需要一個目錄並通過目錄中的文件循環。我打算對這些文件進行一些處理並以新名稱重新保存它們。我使用dirent結構來獲取目錄內容,但是當我嘗試從dirent中獲取FILE *時出現問題。使用dirent通過html文件在c目錄中循環使用dirent
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行,它只是出現segfaults。 (此外,該大小不接近字節,字符或單詞的文件大小。)請幫助,謝謝!
:)
編輯:包括#包括
你嘗試過使用調試器嗎? –
還請包括包含指令 –
我曾嘗試使用gdb,但我無法讓它告訴我發生了什麼。我對gdb不是很有經驗,試圖在這個項目中獲得一些C的榮譽。 – syzygy