正文

SHFILEOPSTRUCT 文件夹操作 困惑2010-03-10 09:24:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/miaowei/50754.html

分享到:

相信对文件夹操作是大家都会经常碰到的问题。而在文件夹操作中,利用 SHFILEOPSTRUCT 进行操作是最快最方便的,而Windows本身自己也用这个进行文件夹的操作,如移动,复制,粘帖等操作。

而最近我在用SHFILEOPSTRUCT进行文件夹移动的时候,却发现它有好几个需要注意的问题。

首先,给出MSDN以及大部分网上会给出的示例代码: 

          SHFILEOPSTRUCT   sfo;

          sfo.hwnd   =   NULL;  
          sfo.wFunc   =   FO_MOVE;  
          sfo.pFrom   =   "D:\\1";  
          sfo.pTo   =   "D:\\2";  
          sfo.fFlags   =   FOF_SILENT   |   FOF_NOCONFIRMATION   |   FOF_NOCONFIRMMKDIR;  
          hr   =   SHFileOperation(&sfo);  

以上便是网上出现最多的代码。

这里有两个问题,这两个问题主要都是集中在sfo.pFrom和sfo.pTo中。

假如代码如下:

          SHFILEOPSTRUCT   sfo;

         char sfrom[256], sto[256];

         strcpy(sfrom, "D:\\1");

         strcpy(sto, "D:\\2");

          sfo.hwnd   =   NULL;  
          sfo.wFunc   =   FO_MOVE;  
          sfo.pFrom   =   sfrom;  
          sfo.pTo   =   sto;  
          sfo.fFlags   =   FOF_SILENT   |   FOF_NOCONFIRMATION   |   FOF_NOCONFIRMMKDIR;  
          hr   =   SHFileOperation(&sfo);
  

在这种情况下,上述操作无效。

第二种错误代码如下:

          SHFILEOPSTRUCT   sfo;

         char sfrom[256], sto[256];

         strcpy(sfrom, ".\\data\\1");

         strcpy(sto, ".\\data\\2");

          sfo.hwnd   =   NULL;  
          sfo.wFunc   =   FO_MOVE;  
          sfo.pFrom   =   sfrom;  
          sfo.pTo   =   sto;  
          sfo.fFlags   =   FOF_SILENT   |   FOF_NOCONFIRMATION   |   FOF_NOCONFIRMMKDIR;  
          hr   =   SHFileOperation(&sfo);
  

在这种情况下,上述操作也无效。

第一种代码无效的修改方法是:

          SHFILEOPSTRUCT   sfo;

         char sfrom[256], sto[256];

       memset(sfrom,0,256);

       memset(sto,0,256);

         strcpy(sfrom, "D:\\1");

         strcpy(sto, "D:\\2");

          sfo.hwnd   =   NULL;  
          sfo.wFunc   =   FO_MOVE;  
          sfo.pFrom   =   sfrom;  
          sfo.pTo   =   sto;  
          sfo.fFlags   =   FOF_SILENT   |   FOF_NOCONFIRMATION   |   FOF_NOCONFIRMMKDIR;  
          hr   =   SHFileOperation(&sfo);
  

第二种错误的修改方法是将相对路径改为绝对路径。

我猜想这可能和windows的内部处理有关。但是不确定,谁让人家不开源呢。

阅读(5001) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册