2010-05-05 5 views
1

У меня есть программа, которая сохраняет данные в файл, и я хочу поместить временную метку текущей даты/времени в этом журнале, но когда я попытаюсь записать время в файл, оно не появится, но другие данные, которые я пишу будем.как я могу сэкономить время на файл?

#include <iostream> 
#include <windows.h> 
#include <fstream> 
#include <string> 
#include <sstream> 
#include <direct.h> 
#include <stdio.h> 
#include <time.h> 

using namespace std; 

string header_str = ("NULL"); 


int main() 
{ 

for(;;) 
{ 


     stringstream header(stringstream::in | stringstream::out); 

     header << "datasdasdasd_"; 

     time_t rawtime; 

     time (&rawtime); 

     header << ctime (&rawtime); 
     header_str = header.str(); 

     fstream filestr; 

     filestr.open ("C:\\test.txt", fstream::in | fstream::out | fstream::app | ios_base::binary | ios_base::out); 

     for(;;) 
     { 
      filestr << (header_str); 

     } 

     filestr.close(); 


} 

return 0; 
} 

Кто-нибудь знает, как это исправить?

+3

Почему у вас бесконечный цикл? –

+3

Бесконечность не квадрат на самом деле :-) – paxdiablo

+1

бесконечной = FUN XD – blood

ответ

3

Это, как я хотел бы сделать это, с вспомогательной функцией, которая просто дала вам дату и время в нужном формате для включения в любой выходном поток:

#include <time.h> 
#include <iostream> 
#include <fstream> 
using namespace std; 

// Helper function for textual date and time. 
// DTTMSZ must allow extra character for the null terminator. 

#define DTTMFMT "%Y-%m-%d %H:%M:%S " 
#define DTTMSZ 21 
static char *getDtTm (char *buff) { 
    time_t t = time (0); 
    strftime (buff, DTTMSZ, DTTMFMT, localtime (&t)); 
    return buff; 
} 

int main(void) { 
    char buff[DTTMSZ]; 
    fstream filestr; 
    filestr.open ("test.txt", fstream::out|fstream::app); 

    // And this is how you call it: 
    filestr << getDtTm (buff) << "Your message goes here" << std::endl; 

    filestr.close(); 

    return 0; 
} 

Это создает файл test.txt с содержимым:

2010-05-05 13:09:13 Your message goes here 
+0

Мда это работает XD tyvm (но кстати вы забыли # включите ) – blood

+0

Хорошо, обвиняйте его в gcc за то, что он так прощал :-) Исправлена ​​ошибка для будущих поколений. – paxdiablo

0

Возможно, это сработало бы ?:

time_t rawtime;

время (& необработанное время); заголовок < < «Время:% s» + ctime (& rawtime);

Надеется, что это работает

+0

жаль нет «ошибка C2110:„+“: не может добавить два указателя» :(о хорошо спасибо в любом случае – blood

0

действительно хороший совет, чтобы проверить boost\date_time library. Это здорово, он получил все, что вам нужно, поддерживает простой вывод и форматирование и переносится.

Стоит проверить.

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