typedef struct _SHFILEOPSTRUCT {
HWND hwnd;
UINT wFunc;
LPCTSTR pFrom;
LPCTSTR pTo;
FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted;
LPVOID hNameMappings;
LPCTSTR lpszProgressTitle;
} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;
1). SHFileOperation需要注意的问题点:
◆ pFrom和pTo两个参数需要有两个\0结尾才行。
◆ 函数调用之后不能使用GetLastError来获取函数的失败原因
2). 这里引申出另一个问题:
bool _RenameFile(const TCHAR *_pFrom,const TCHAR *_pTo,WORD flags/*=FOF_NOCONFIRMATION */)
{
TCHAR pTo[MAX_PATH]={0}; _tcscpy_s(pTo,_pTo);
TCHAR pFrom[MAX_PATH]={0}; _tcscpy_s(pFrom,_pFrom);
SHFILEOPSTRUCT FileOp={0};
FileOp.fFlags= flags;
FileOp.pFrom = pFrom;
FileOp.pTo = pTo;
FileOp.wFunc = FO_RENAME;
return SHFileOperation(&FileOp) == 0;
}
这样看没有什么问题.但是发现程序的行为有问题.后来才发现是之前总结的原因,ok,吧_tcscpy_s改成_tcscpy搞定.
这个就有问题:_tcscpy_s和_tcscpy不等价