正文

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的内部处理有关。但是不确定,谁让人家不开源呢。

阅读(5283) | 评论(0)


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

评论

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