2013-05-31 109 views
-1

我有時間在char[]格式,但我需要將其轉換爲CString。下面是我有什麼,但它不工作:char []到CString轉換

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

您可以使用std :: ostringstream和std ::字符串時間轉換成字符串 喜歡的東西?這樣,我已經證明了同樣秒,你可以幾個小時做的,分等等

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

如果你有一個文件擴展名,然後把它會在sprintf的/的CString ::格式呼叫的最佳去處同時格式化日期字符串 另外,通常當使用文件名稱的日期進行消隱,按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, ...); 

更新:回答你的第一個評論:

NO CString::GetBuffer用來得到,你可以寫,一般作爲緩衝區的sprintf,GetModuleFilename CString的一個可變的緩衝區, ... 功能。

如果你只是想串的讀值,使用轉換操作是這樣的:

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

現在,如果我可以將其轉換爲CString,那麼我將使用CString的GetBuffer()方法將其轉換爲LPSTR。不幸的是,這些轉換非常糟糕。 – SyntaxError