今天忙了一上午,都一个问题搞得莫名其妙,其实,只要真正的理解了,也就是个很小的问题。
我们获取系统的Temp:
GetTempPath(MAX_PATH, g_strTempDir.GetBufferSetLength(MAX_PATH));
得到的系统Temp路径 g_strTempDir是一个短的路径。当然,我们可以把它编程完整的。
GetLongPathName(
g_strTempDir.GetBuffer(0),//LPCTSTR lpszShortPath,
g_strTempDir.GetBufferSetLength(MAX_PATH),//LPTSTR lpszLongPath,
MAX_PATH//DWORD cchBuffer
);
这样我们获得了一个完整的系统Temp路径。
但是,会有一个奇怪的问题。在这个路径后加不上其他字符串。比如:
CString strTest=_T("");
strTest = g_strTempDir + _T("Test");
我们会很郁闷发现,strTest竟然只是等于g_strTempDir。为什么?
在网路上搜索了不久,终于找到了答案。
/
实际上GetTempPath返回的字符串包含了一个结束符,你看一下Len的实际值就明白了,因此在后面加的字符串被当作无效。
因此,在得到系统Temp后,我做了如下的处理:
g_strTempDir = g_strTempDir.Left(strlen(g_strTempDir));
这样,结束符就被删掉了。
还有,越来越不相信CString::GetLength()了。似乎,原始的还更好用些。(哈哈,只要能用就行,其他的就不管了)。