2012-05-31 75 views
2

我使用SFML 1.6製作遊戲,有時會出現錯誤,當用戶運行遊戲時,我不希望控制檯顯示出來,所以我重定向了stderr(其中SFML用於明顯地記錄錯誤)到以當前日期命名的文件。所以如果出現錯誤,用戶可以檢查日誌。現在,我也希望每個日誌之前把時間,所以日誌文件將是這樣的:向日志添加時間

12:34:17 CDT 
failed to load image "sprite.png" 

12:35:01 CDT 
failed to load file "font.ttf" 

是否有當前時間,任何輸出「上粘性」,以獲得上述結果的方法嗎?

編輯

我忘了提,SFML庫是記錄最錯誤的,我要上的時候釘在其離開應用程序,可以這麼說的人。有點像收費站,除了任何離開之外都會有一段時間。我知道如何讓時間成爲一個字符串,而我不是那種調用printf或其他任何函數的人。

+0

可能的重複:http://stackoverflow.com/questions/997946/c-get-current-time-and-date – Rhexis

+0

我已經可以獲得時間作爲一個字符串,我需要在每個stderr日誌前加上它雖然... – rcplusplus

+0

你看過fprintf嗎? http://www.cplusplus.com/reference/clibrary/cstdio/fprintf/ – Rhexis

回答

0

如果你可以修改功能進行實際打印,然後是(我建議您查找的功能timectimelocaltimestrftime)。如果可以不是修改該功能,那麼沒有。

+0

我認爲它發生在他們的圖書館,我不想要觸及那些並冒險破壞某些東西... – rcplusplus

2

你可以做得比簡單的重定向更好:你可以在輸入的字符流和寫入文件之間插入你自己的代碼。

基本的想法是從filebuf派生一個類來控制放置的字符。

你有兩種策略:

  • 最簡單的方法是,每次你讀你設置一個標誌一個\n字符,並在第一put後您插入時間戳(並取消設置標誌)
  • 硬盤的方式是,你bufferize輸出,直到\n字符滿足,在這一點上,你格式化你的時間戳,然後刷新緩衝區(直到\n

如果我們認爲每行的格式化開始和結束之間沒有太多時間,那麼簡單的方法應該足夠可靠地工作。

我認爲重寫xsputn應該足以完成工作。

+0

+1這個建議與他們的匹配文檔:http://www.sfml-dev.org/documentation/2.0/group__system.php#func-members (雖然sf :: err()來自SFML 2.0,但我確定它與std: :CERR) – cgmb