SHFileOperation删除和拷贝文件(夹) - 小众知识

SHFileOperation删除和拷贝文件(夹)

2013年01月27日 14:18:05 苏内容
  标签: 删除/拷贝
阅读:7328

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;
}

扩展阅读