2013-05-31 4 views
-1

У меня есть время в формате char[], но мне нужно его преобразовать в CString. Вот что у меня есть, но он не работает:char [] to CString Conversion

GetSystemTime(&t); 
char time[60] = ""; 
char y[20],mon[20],d[20],h[20],min[20],s[20]; 

sprintf(y, "%d", t.wYear); 
sprintf(d, "%d", t.wDay); 
sprintf(mon, "%d", t.wMonth); 
sprintf(h, "%d", t.wHour+5); 
sprintf(min, "%d", t.wMinute); 
sprintf(s, "%d", t.wSecond); 

strcat(time,d); 
strcat(time,"/"); 
strcat(time, mon); 
strcat(time,"/"); 
strcat(time, y); 
strcat(time," "); 
strcat(time,h); 
strcat(time,":"); 
strcat(time, min); 
strcat(time,":"); 
strcat(time, s); 

CString m_strFileName = time; 

Любая помощь .. :(

+3

«Это не работает» очень расплывчато. Вы получаете ошибки компиляции? Это крушение? Является ли результат неправильным? – molbdnilo

ответ

0

Вы можете использовать зЬй :: ostringstream и зЬй :: строка для преобразования времени в строку Что-то вроде?. это. Я показал на несколько секунд так же вы можете сделать в течение нескольких часов, минут и т.д.

int seconds; 
std::ostringstream sec_strm; 
sec_strm << seconds; 
std::string sec_str(sec_strm.c_str()); 
1

Если у вас есть расширение файла, то лучшее место, чтобы положить это было бы в Sprintf/CString :: Format вызова при форматировании строки даты. Кроме того, обычно, когда для сопоставление даты имени файла выполняется в обратном порядке yyyy/mm/dd, так что сортировка корректно работает в проводнике Windows.

1 Заключительная вещь, прежде чем перейти в какой-то код: в Windows есть недопустимые символы для имен файлов, среди которых символы слэша [EDIT] и символ двоеточия [/ EDIT]. Обычно для имен файлов используются точки или тире. В моих решениях используются слэши и формат даты, которые вы используете, сохраняя код, но вы должны изменить, по крайней мере, косые черты, если вы используете его для имен файлов.

Позвольте мне привести несколько решений для Вас:

1: Подобно тому, что было:

char time[60]; 
sprintf(time, "%u/%u/%u %u:%u:%u", t.wDay, t.wMonth, t.wYear, t.wHour + 5, t.wMinute, t.wSecond); 
CString m_strFileName(time); //This uses the CString::CString(const char *) constructor 
//Note: If m_strFileName is a member variable of a class (as the m_ suggests), then you should use the = operator and not the variable declaration like this: 
m_strFileName = time; //This variable is already defined in the class definition 

2: Использование CString::Format

CString m_strFileName; //Note: This is only needed if m_strFileName is not a member variable of a class 
m_strFileName.Format("%u/%u/%u %u:%u:%u", t.wDay, t.wMonth, t.wYear, t.wHour + 5, t.wMinute, t.wSecond); 

3: Почему вы с помощью CString?

Если это не переменная-член класса, то вам не нужно использовать CString, с которой вы можете напрямую использовать время.

char time[60]; 
sprintf(time, "%u/%u/%u %u:%u:%u", t.wDay, t.wMonth, t.wYear, t.wHour + 5, t.wMinute, t.wSecond); 
FILE *pFile = fopen(time, "w"); 
//or... 
HANDLE hFile = CreateFile(time, ...); 

UPDATE: ОТВЕТ НА ВАС ПЕРВЫЙ КОММЕНТАРИЙ:

NO CString::GetBuffer используется для получения изменяемого буфера CString, что вы можете написать на, как правило, в качестве буфера для Sprintf, GetModuleFileName, ... функций.

Если вы просто хотите, значение строки для чтения, используйте оператор литья, как это:

CString str("hello"); 
printf("%s\n", (LPCSTR)str); //The cast operator here gets a read-only value of the string 
+0

Теперь, если я могу преобразовать это в CString, тогда я использую метод GetBuffer() CString для преобразования его в LPSTR. К сожалению, я очень плохо разбираюсь в таких преобразованиях. – SyntaxError