【发布时间】:2011-06-04 10:01:57
【问题描述】:
为了使用 SHFileOperation,我需要将字符串格式化为双空终止字符串。
有趣的部分是我发现以下工作之一,但不是两个:
// Example 1
CString szDir(_T("D:\\Test"));
szDir = szDir + _T('\0') + _T('\0');
// Example 2
CString szDir(_T("D:\\Test"));
szDir = szDir + _T("\0\0");
//Delete folder
SHFILEOPSTRUCT fileop;
fileop.hwnd = NULL; // no status display
fileop.wFunc = FO_DELETE; // delete operation
fileop.pFrom = szDir; // source file name as double null terminated string
fileop.pTo = NULL; // no destination needed
fileop.fFlags = FOF_NOCONFIRMATION|FOF_SILENT; // do not prompt the user
fileop.fAnyOperationsAborted = FALSE;
fileop.lpszProgressTitle = NULL;
fileop.hNameMappings = NULL;
int ret = SHFileOperation(&fileop);
有人对此有想法吗?
还有其他方法可以附加双终止字符串吗?
【问题讨论】:
-
这些都不应该工作。如果其中一个发生了,那只是一个意外。
-
@Greg:由于 CString 具有以下
friend CString operator+( const CString& string, LPCTSTR lpsz );,第二个示例不应该起作用吗? (工作是指 + 操作,而不是将CString传递给SHFileOperation) -
@Eugen: 不,因为
CString的+运算符将第二个操作数视为普通的以NUL 结尾的char *,它无权查看第一个 NUL终止符。 -
@Greg:非常有道理。我将“不工作”部分解释为“没有编译”。
标签: c++ string mfc shfileoperation