2012-05-31 2 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" 

Есть ли способ «липкости на» текущее время на любой выход, чтобы получить результаты, показанные выше?

EDIT

Я забыл упомянуть, библиотека 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

Если вы можете изменить функцию делает фактическую печать, то да (я рекомендую вам посмотреть функции time, ctime, localtime и strftime). Если вы можете не изменить функцию, значит нет.

+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: : сегг) – cgmb

 Смежные вопросы

  • Нет связанных вопросов^_^