1
我一直在嘗試在c中編寫迭代目錄。我從一個標準的遞歸目錄遍歷開始,它按預期工作。現在我試圖使用隊列結構將其轉換爲迭代版本,但它的行爲意外。不知何故,子目錄中的一個文件正在被添加到我的隊列中,並且當試圖將文件作爲目錄打開時,程序明顯失敗。c中的迭代目錄遍歷
代碼段
char *dirName;
DIR *dp;
struct dirent *d_ent;
struct stat s;
char name[80];
...
while(!IsEmpty(q)){
dirName = FrontAndDequeue(q);
if((dp = opendir(dirName)) == NULL) {
printf("ERROR: dirRec: %s: %s\n", dirName, strerror(errno));
} else {
while((d_ent = readdir(dp)) != NULL) {
if((strcmp(d_ent->d_name, "..") != 0) && (strcmp(d_ent->d_name, ".") != 0)){
strcpy(name, dirName);
strcat(name, "/");
strcat(name, d_ent->d_name);
if(lstat(name, &s) < 0) {
printf("ERROR: dirDepth: %s: %s\n", name, strerror(errno));
} else {
if(S_ISDIR(s.st_mode)) { /* Process directories. */
printf("Directory : %s\n", name);
Enqueue(name, q);
} else { /* Process non-directories. */
printf("File : %s\n", name);
}
}
}
}
closedir(dp);
樣品試驗
$ ./dir .
File : ./dir.c
File : ./dir.cpp
File : ./dir.exe
File : ./dir.exe.stackdump
File : ./dirRec.c
File : ./dirRec.exe
File : ./fatal.h
File : ./Makefile
File : ./queue.c
File : ./queue.h
File : ./stackli.c
File : ./stackli.h
Directory : ./testL1a
Directory : ./testL1b
File : ./testL1b/New Bitmap Image.bmp
ERROR: dirRec: ./testL1b/New Bitmap Image.bmp: Not a directory
* Facepalm *沒錯,謝謝。 – ench 2012-04-06 19:15:10
這引出了另一個問題,將字符串複製到隊列中的最佳方法是什麼(我已切換到C++和STL ::隊列)。 – ench 2012-04-06 20:16:54
點擊「提問」按鈕來提問。 – 2012-04-06 20:17:31