而我強無敵啊。用的是循環雙向鏈表存放的數據。先上結構體:
/* 用于存放文件信息 */typedef struct FILE_STRU{ unsigned char *name; /* 文件名字 */ struct FILE_STRU *PRev, *next; /* 前后的文件 */}file_stru;/* 用于存放文件夾信息 */typedef struct DIR_STRU{ unsigned char *name; /* 文件夾名字 */ struct DIR_STRU *node_dir_head; /* 文件夾下文件夾的地址 */ struct FILE_STRU *file_head; /* 文件夾下首文件的地址 */ struct DIR_STRU *prev, *next; /* 相同路徑前后的文件夾 */}dir_stru;然后在使用過程中,發現讀取的時候只輸出一部分。是存放時候的問題呢,還是讀取時候的問題呢?
直奔答案了啊,都不是強無敵的思路有問題啊,是內存知識還沒有掌握,這下好了,有了突破,就是存放的時候和讀取的時候出問題了。。感覺自己66的。上代碼:static dir_stru *_pdir = NULL;/* 查找文件夾下的文件 */struct FILE_STRU *search_file(char *name){ DIR *pdir = (DIR *)source_dir_opened(name); if(pdir == NULL) return NULL; /* 獲取該文件夾文件名 */ char *dir, *dirname; dir = strdup(name); while(dir != NULL) dirname = strsep(&dir, "/"); file_stru *pfile_a = (file_stru *)file_list_init(); ((dir_stru *)find_dir_node_by_name(_pdir, dirname))->file_head = pfile_a; struct dirent *dir_file; char *path_tmp; /* 開始插入對應子文件 */ while(dir_file = readdir(pdir)) { if(dir_file->d_type == DT_REG) file_list_insert((file_stru *)pfile_a, file_list_get_node(dir_file->d_name)); if(dir_file->d_type == DT_DIR) { if(!strcmp(dir_file->d_name, ".") || !strcmp(dir_file->d_name, "..")) continue; path_tmp = (char *)get_file_filepath(name, dir_file->d_name); search_file(path_tmp); free(path_tmp); } } closedir(pdir); return pfile_a;}看到紅色標識沒。。。尷尬。。。文件夾一關閉,對應的dirent內存空間也是會釋放的!!我定義存放名字的是指針呢!內存都被釋放了,指到哪了都。。。然后問題就解決了。直接上正確代碼:file_list_insert((file_stru *)pfile_a, file_list_get_node(strdup(dir_file->d_name)));closedir(pdir);文件夾資源釋放前把文件名字struct dirent *p->d_name內存弄沒了。。好了。大概就是這么蠢的問題我花了好幾個小時才找出來。漲知識了。
新聞熱點
疑難解答