SHFileOperation操作比较方便,因为源文件名支持多个文件,以/0间隔,所以末尾要用两个零结束。如果用CString保存源文件名,在XP上操作没问题,在WINCE下,用EVC,重命名文件夹可以,但是重命名文件时,就失败,原因就是没有用两个零结束。所以做了下面的封装。
/*---- 文件操作函数,对SHFileOperation作简单封装 csSrcFile: 源文件名 csDestFile:目的文件名 type:类型操作 ---------------------------*/ BOOL CCommonTool::SHFileOperation( CString csSrcFile, CString csDestFile, unsigned short type ) { // 必须初始化,源文件名支持多个文件,以/0间隔,所以末尾要用两个零结束 TCHAR szSrcPath[MAX_PATH+2]={0}, szDest[MAX_PATH+2]={0}; wcscpy(szSrcPath, csSrcFile.GetBuffer(0)); wcscpy(szDest, csDestFile.GetBuffer(0)); // 如果是文件夹,末尾不能带反斜线 if ( szSrcPath[STRLEN(szSrcPath)-1]=='//' ) { szSrcPath[STRLEN(szSrcPath)-1]=0x0; } if ( szDest[STRLEN(szDest)-1]=='//' ) { szDest[STRLEN(szDest)-1]=0x0; } SHFILEOPSTRUCT op; memset(&op,0, sizeof(SHFILEOPSTRUCT)); op.fFlags=FOF_RENAMEONCOLLISION|FOF_NOERRORUI|FOF_NOCONFIRMATION|FOF_SILENT; op.wFunc= type; op.pFrom = szSrcPath; op.pTo= szDest; op.hwnd = NULL; return (::SHFileOperation(&op)==0); }
本文介绍了一个针对SHFileOperation函数的简单封装方法,该方法解决了在不同操作系统环境下进行文件重命名操作的问题,特别是针对Windows XP和Windows CE平台。
2201

被折叠的 条评论
为什么被折叠?



