2014-10-03 79 views
0

我看了很多網站,嘗試了所有可能的解決方案,但代碼打開該文件,但犯規寫出fprintf中線上,任何幫助表示讚賞文件被打開,但不能寫入

int Function(){ 
    FILE *outputtfilepointer; 

    outputtfilepointer = fopen("output.csv", "w"); 
    fprintf(outputtfilepointer,"Iteration,5,6,%d,%f\n",5,0.6);  

    fclose (outputtfilepointer); 
    return 0; 
} 
+1

這是C代碼,而不是C++。你的C++標籤是錯誤的。 – 2014-10-03 05:09:16

+0

這也是C++(我剛剛編譯它與我的C++編譯器,它適用於我) – 2014-10-03 05:10:01

+0

那麼可能是另一個原因?我多次嘗試 – user1450005 2014-10-03 05:10:42

回答

1

你閱讀的文檔fopen(3)fprintf(3)?這些功能可能會失敗,你應該測試:的fopen

int Function(){ 
    FILE *outputtfilepointer = fopen("output.csv", "w"); 
    if (!outputfilepointer) { perror("fopen"); exit(EXIT_FAILURE); }; 
    if (fprintf(outputtfilepointer,"Iteration,5,6,%d,%f\n",5,0.6)<0) 
    { perror("fprintf"); exit(EXIT_FAILURE); }; 
    if (fclose (outputtfilepointer)) 
    { perror("fclose"); exit(EXIT_FAILURE);} 
    return 0; 
} 

測試失敗要求(即不容易發生)。很多人 (包括我)都是跛腳,所以不要打擾測試失敗fprintffclose,因爲它不常見。

你需要一個#include <stdlib.h>exit

當然,閱讀每一個功能您正在使用,例如文檔也fclose(3)perror(3)exit(3)

通知的最小模式來處理錯誤情況:打印使用perror(到stderr的)一個errno相關消息然後exit。許多嚴重的項目正在做更復雜的事情(例如,使用strerror(errno)和一些錯誤處理程序longjmp ...)

BTW,你應該與所有警告和調試信息編譯(如gcc -Wall -g)和使用調試器gdb) 。在Linux上,您也可以使用valgrind,strace(1),ltrace(1)

+0

非常感謝,經過測試,仍然打開文件我敢肯定,因爲文件的修改時間已被更改,但不寫在文件內的行 – user1450005 2014-10-03 05:21:40

+0

有趣的是,我在另一個函數中使用相同的代碼,並打開文件,並寫入文件,但在此功能中,它不起作用 – user1450005 2014-10-03 05:23:40

+0

是的。順便說一句,你正在使用哪種操作系統,文件系統,編譯器,優化標誌?請編輯您的問題以改進它! – 2014-10-03 05:25:13