请教关于SHFileOperation的用法.代码如下: TCHAR from[MAX_PATH] = {"C:\\Documents and Settings\\admin\\My Documents\\Downloads\\*.*\0"};
TCHAR to[MAX_PATH] = {"F:\\2\0"}; FileOp.fFlags = FOF_SIMPLEPROGRESS; //FOF_NOCONFIRMATION | 
FileOp.hNameMappings = NULL; 
FileOp.hwnd = m_hWnd; 
FileOp.lpszProgressTitle = NULL; 
FileOp.pFrom =  from; //l_pFrom;
FileOp.pTo =  to;     //l_pTo;  
FileOp.wFunc = FO_COPY;  int l_iRet = SHFileOperation(&FileOp);现在的问题是:这段代码确实可以实现把指定目录下的所有内容拷贝到目标目录下.但拷贝到目标目录下的文件却不能通过手工删除,即使重启也无法删除目标目录(pTO)下的文件和目录,错误信息为:
  无法删除 ***** :访问被拒绝.  请确定磁盘未满或未被写保护.而且文件未被使用.说明:排除文件被使用或被写保护的可能.只要经上述代码拷贝后的文件和目录就无法删除.请高手解答,谢谢!

解决方案 »

  1.   

    hNameMappings不要写。写了就需要SHFreeNameMappings释放打开了一个句柄没关
      

  2.   

    http://hi.baidu.com/%B4%E7%B2%DD%D0%C4_/blog/item/e3a8200a28f6ea3ab1351d38.html
      

  3.   

    也许是TCHAR from[MAX_PATH] = {"C:\\Documents and Settings\\admin\\My Documents\\Downloads\\*.*\0"}; 这个里面有些文件复制有问题吧。你试一下复制单个的看有没有问题。例如:
    TCHAR from[MAX_PATH] = {"C:\\Documents and Settings\\admin\\My Documents\\Downloads\\a.txt\0"}; 
      

  4.   

    回复2楼:屏蔽掉hNameMappings这条语句还是有同样的问题,不能删除.
    回复3楼:没有找到我想要的内容,不过还是要谢谢提供的方法.
    回复4楼:复制单个文件后,同样不能将该文件删除.刚才不经意间想起,我拷贝过去的目录可能没有删除权限,把目标路径重新设置后可以删除了.实在是我粗心大意.感谢三位的热心帮助.
      

  5.   

    同时请教另外一个问题:VC 2008里面有没有函数或者类,来实现压缩文件夹的丫?例如我要把:C:\test\abc\*.* 我想把abc目录下的所有文件压缩成为abc.zip 或者 abc.rar 等压缩文件,能使用winrar打开或者windows自带的unzip压缩工具打开呢?
      

  6.   

    windows里面有一个zip命令,你可以通过system或者ShellExecute来调用它,可以完成压缩
      

  7.   

    回复7楼/8楼的.我的电脑上怎么没有zip这个命令呢?另外,我想把压缩的功能放到一个EXE内,不想有多的lib文件或dll文件支持.不知道是否能实现.我只需要能把指定的目录压缩为zip或rar格式即可了.
      

  8.   

    再次请教各位大侠:我在使用SHFileOperation时发现这个是异步函数,即在拷贝的时候该函数已经返回了,我要怎么样才知道拷贝操作在什么时候完成呢?因为拷贝一个txt文件和拷贝一个200MB的文件所有的时间肯定是不一样的。我想在拷贝操作完成后再执行后面的代码,该如何操作呢?