2013-11-09 53 views
0

我使用遞歸函數給出目錄,掃描它並打印出所有文件和子目錄。它還將文件列表打印到txt文件。在遞歸函數中使用fprintf時遇到問題

我stdout是:

[test] 
     [empty] 
     [notreally] 
      [real empty] 
     - haha.txt 
     - readme.txt 
    - test2.c 
    - test.c 

當文件夾是在[]。這是我所期望的標準輸出是,但是當我檢查我的log.txt它是不一樣的:

  [real empty] 
     [notreally] 
     - haha.txt 
     [empty] 
     - readme.txt 
    [test] 
    - test2.c 
    - test.c 

如果我改變FILE *日誌= FOPEN(LOGFILEPATH,「A +」);到FILE * log = fopen(logFilePath,「w」);那麼輸出到log.txt應該是:

[test] 
- test2.c 
- test.c 
.txt 
+0

你打開日誌文件,然後立即關閉主要的日誌文件?錯字? – Duck

+0

這只是在我運行程序之前清除日誌的內容,而不是每次都手動執行。 – user2923535

+0

打開它爲「w」已經這樣做。如果該文件已經存在,它將截斷該文件並開始寫入位置0。您正在打開,截斷,關閉,打開,追加。 – Duck

回答

1

你忘了有關parens。這:

else 
    printf("%*s- %s\n", level*2, "", entry->d_name); 
    fprintf(log,"%*s- %s\n", level*2, "", entry->d_name); 

應該

else { 
    printf("%*s- %s\n", level*2, "", entry->d_name); 
    fprintf(log,"%*s- %s\n", level*2, "", entry->d_name); 
} 

另外,不要打開,每次你看到一個文件時關閉該文件。打開一次寫入("w")並將其傳遞給函數。不要打開文件來追加功能,請將fopen帶出該功能。

+0

好了解決了,但log.txt仍然是錯誤的。 – user2923535

+0

你正在打開文件來追加:'fopen(logFilePath,「a +」);'打開寫入以便舊內容被擦除('「w」') – piokuc

+0

不要每次關閉/打開文件訪問文件/目錄。打開它只需傳遞句柄作爲遞歸函數的另一個參數。 – piokuc