如果您有文件扩展名,那么最好的放置位置是在格式化日期字符串时的 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, ...);
更新:回答您的第一条评论:
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