SHFileOperation删除和拷贝文件(夹) BOOL DeleteFolder( LPCTSTR lpszPath) { SHFILEOPSTRUCT FileOp; ZeroMemory( ( void * ) & FileOp, sizeof ( SHFILEOPSTRUCT) ) ; FileOp. fFlags = FOF_NOCONFIRMATION; FileOp. hNameMappings = NULL ; FileOp. hwnd = NULL ; FileOp. lpszProgressTitle = NULL ; FileOp. pFrom = lpszPath; FileOp. pTo = NULL ; FileOp. wFunc = FO_DELETE; return SHFileOperation( & FileOp) = = 0; } // 这个函数可以删除目录(目录下的子目录和文件) 这是网上找的一段代码,但是在删除目录时总是说无法读取源文件或磁盘。但是目录确实存在。 查了查MSDN,网上看到别人也有同样的问题,看看他们的解答。原来SHFileOperation中的pFrom可以表示多个路径,各个路径之间以'/0'分隔,最后以'/0/0'(即连续的两个'/0')结束, 于是改了过来。可是还是不行。 去掉路径最后的一个'/'("c://data//"改为"c://data"),成功。 下面这个函数需要注意同样的问题。 BOOL CopyFolder( LPCTSTR lpszFromPath, LPCTSTR lpszToPath) { SHFILEOPSTRUCT FileOp; ZeroMemory( ( void * ) & FileOp, sizeof ( SHFILEOPSTRUCT) ) ; FileOp. fFlags = FOF_NOCONFIRMATION ; FileOp. hNameMappings = NULL ; FileOp. hwnd = NULL ; FileOp. lpszProgressTitle = NULL ; FileOp. pFrom = lpszFromPath; FileOp. pTo = lpszToPath; FileOp. wFunc = FO_COPY; return SHFileOperation( & FileOp) = = 0; } // lpszFromPath指示源文件夹 lpszToPath是目的目录, 函数会在lpszToPath文件夹下新建一个文件夹(与源文件夹同名),