分类: C/C++

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

=====================================

今天看到一个关于SHFileOperation函数使用的介绍,发现下面一些有用的资料,都是些之前未仔细了解的方面,这里把他们记录下来,留待以后查阅参考。

fFlags成员标志间的关系

标志

抑制的对话框

相关性与优先级

FOF_MULTIDESTFILES

FOF_FILESONLY

FOF_SILENT

如果设置,进度对话框不显示。

优先于FOF_SIMPLEPROGRESS标志。

FOF_SIMPLEPROGRESS

为FOF_SILENT标志所抑制。

FOF_RENAMEONCOLLISION

如果设置了这个标志,当被移动或拷贝的文件与已存在文件同名时置换对话框不会出现。

名字冲突时,如果FOF_NOCONFIRMATION标志设置,则操作继续。

如果二者都设置了,则它优先于FOF_NOCONFIRMATION。即,文件以给定的新名字复制,而不是覆盖。

FOF_NOCONFIRMATION

如果设置,确认对话框在任何情况下都不出现。

名字冲突时,引起文件覆盖,除非设置了FOF_RENAMEONCOLLISION标志。

FOF_NOCONFIRMMKDIR

抑制请求建立新文件夹的对话框

缺省目录作为严重错误产生一个错误消息框。

建立目录的确认对话框作为错误消息框是否显示依赖于FOF_NOERRORUI的设置。

FOF_NOERRORUI

抑制所有错误消息框。

优先于前一个标志。如果设置,则,缺省目录引起不被处理的异常,并且返回错误码。

删除文件

文件删除是一个简单的操作,它仅仅影响到输入缓冲pFrom,而pTo缓冲被忽略。与文件复制一样,操作的详细情况依赖于标志的设置。相关的标志是:

标志

描述

FOF_SILENT

0x0004

这个操作不回馈给用户,就是说,不显示进度对话框。相关的消息框仍然显示。

FOF_NOCONFIRMATION

0x0010

这个标志使函数对任何遇到的消息框都自动回答Yes。

FOF_ALLOWUNDO

0x0040

如果设置,这个标志强迫函数移动被删除的文件到‘回收站’中。否则,文件将被物理地从磁盘上删除。

FOF_FILESONLY

0x0080

设置这个标志导致函数仅仅删除文件,跳过目录项。它仅仅应用于指定通配符的情况。

FOF_SIMPLEPROGRESS

0x0100

这导致简化用户界面。使之只有动画而不报告被删除的文件名。代之的是显示lpszProgressTitle成员中指定的文字。(Win7实际中貌似不可用)

FOF_NOERRORUI

0x0400

如果设置了这个标志,任何发生的错误都不能使消息框显示,而是程序中返回错误码。

这里出现的标志最要紧的是FOF_ALLOWUNDO,它决定文件是否一次就全部删除,或存储到‘回收站’中等候可能的恢复。如果FOF_ALLOWUNDO被设置,文件则被移动到回收站,并且这个操作可以被Undo(尽管可以手动Undo)。Undo特征仅在删除下可用,在拷贝与移动中没有等价的操作。

SHFileOperation()函数的返回值

MSDN资料中说明,SHFileOperation()在成功时返回0,失败时返回非0值。显然这是真的,但并不是最有用的解释。重复测试这个函数,可以确信它有非常多的终止方式。事实上,我们经常在系统错误的提示中运行,在有些地方这个函数只是简单地返回从更靠近文件系统的其它程序中获得的返回码。下面列表给出了SHFileOperation()返回的最通常的部分错误。

错误码

描述

2

如果你试图重命名多重文件,这个消息就会出现。描述是相当直接的:系统不能找到指定的文件。

7

在询问是否想要置换给定文件时,你回答了‘取消’,函数就返回这个错误码。它的描述也是相当的不明确—存储控制块被销毁

115

在试图重命名文件到不同的文件夹时,发生这个文件系统错。重命名文件只是改变文件名,而不能改变文件夹。

117

一个IOCTL错(输入/输出控制),在目的路径中有错误时或取消了新目录的建立时,这个错误发生了。

123

你正在试图重命名一个文件,然而你给出的名字是一个已经存在的文件。它也有一个无用的描述:文件名,目录名,或卷标号的语法是不正确的

1026

在试图移动或拷贝一个不存在的文件时,出现这个文件系统错。一般地,它提示了,源缓冲中的某些东西应该修改一下。这个错误码弹出一个的错误框,你可以通过设置FOF_NOERRORUI标志抑制它的显示。

https://msdn.microsoft.com/en-us/library/windows/desktop/bb762164(v=vs.85).aspx

http://blog.chinaunix.net/uid-11477431-id-2872890.html

http://blog.csdn.net/tht2009/article/details/6762636



SHFileOperation DeleteFolder相关推荐

  1. 使用Windows的SHFileOperation外壳函数实现文件操作

    在Windows的shellapi文件中定义了一个名为SHFileOperation()的外壳函数,用它可以实现各种文件操作,如文件的拷贝.删除.移动等,该函数使用起来非常简单,它只有一个指向SHFI ...

  2. VC批量拷贝,移动,删除文件---SHFileOperation

    SHFileOperation 函数功能描述:文件操作,与 Shell 的动作相同. 函数原型: #include<shellapi.h> WINSHELLAPI int WINAPI S ...

  3. SHFileOperation()函数移动,复制,删除文件\文件夹

    (转载于:http://hi.baidu.com/%B4%E7%B2%DD%D0%C4_/blog/item/e3a8200a28f6ea3ab1351d38.html) //删除文件或者文件夹 bo ...

  4. SHFileOperation使用

    总结一下SHFileOperation的用法,希望对大家有用 //删除文件或者文件夹 bool DeleteFile(char * lpszPath) { SHFILEOPSTRUCT FileOp= ...

  5. 文件/文件夹操作函数封装(使用SHFileOperation和SHCreateDirectory函数实现)

    最近工作中涉及到很多文件和文件夹的处理,包括删除.检测是否存在.移动.复制等,用过CopyFile.MoveFile等函数,也使用过SHFIleOperation()函数,觉得后者比较好用些,参考了C ...

  6. 对SHFileOperation函数的一点研究

    SHFileOperation是一种外壳函数,用它可以实现各种文件操作,如文件的拷贝.删除.移动等,当然,它也可以对文件夹进行操作.它操作文件夹有一个亮点就是,当删除某个文件夹时可以删除非空文件夹,而 ...

  7. SHFileOperation函数

    在Windows的shellapi文件中定义了一个名为SHFileOperation()的外壳函数,用它可以实现各种文件操作,如文件的拷贝.删除.移动等,该函数使用起来非常简单,它只有一个指向SHFI ...

  8. Excel-VBA文件操作

    本文转载自https://blog.csdn.net/threshold1980/article/details/78864240 Excel-VBA操作文件四大方法 在我们日常使用Excel的时候, ...

  9. Excel-VBA操作文件四大方法之一(转)

    Excel-VBA操作文件四大方法之一 https://www.cnblogs.com/top5/archive/2009/10/29/1591937.html 在我们日常使用Excel的时候,不仅会 ...

  10. Excel-VBA操作文件四大方法

    原文地址为: Excel-VBA操作文件四大方法 Excel-VBA操作文件四大方法之一 在我们日常使用Excel的时候,不仅会用到当前Excel文件的数据,还经常需要访问其他的数据文件.这些数据文件 ...

最新文章

  1. 随机生成文件名字或随机生成一个数
  2. 化工热力学重修补考第三章重点内容
  3. Angular structural指令host element的定位调试
  4. PHP 过滤器(Filter)
  5. endp 汇编start_飞思卡尔Kinetis L 汇编语言启动文件startup_MK25Z4简单分析
  6. javascript中基本类型和引用类型的区别分析
  7. idea ssm打war包_使用idea新建springBoot+Gradle项目(超详细)
  8. 从外部访问Kubernetes集群中的应用
  9. 微信小程序上传图片到服务器总是失败_微信小程序上传图片到服务器实例
  10. yii框架封装拼多多开放平台sdk
  11. zigbee学习之JN5169 ADC外设
  12. 黑之契约者OP《Howling》完整版歌词
  13. 内外网同时连接配置说明
  14. WIN7电脑语言栏不见了---解决方案
  15. Java中Springboot实战之签到功能详解(超全面)
  16. servlet3 文件上传
  17. Day06(上)C++继承和派生
  18. 【硬件在环HIL环境配置】
  19. uva 10286 Trouble with a Pentagon
  20. Intel汇编-传送MMX整数

热门文章

  1. 公用方法:得到汉字的首字母(大写) 方案3
  2. Mrbayes使用形态学数据构建系统发育树
  3. [html5网页设计]英雄联盟lpl总决赛游戏网页设计大作业,hbuilder网页设计成品,dw网页设计成品模板,游戏网页设计带图片轮播,音乐,视频,注册登录表单。
  4. SaaS的收入模型有哪些?终于有人讲明白了
  5. 国自然的技术路线图?用PPT试试
  6. Vue3+elementplus搭建通用管理系统实例七:通用表格实现上
  7. MATLAB/Simulink双馈风机调频模型,风电调频模型,基于三机九节点搭建含双馈风机的电力系统模型
  8. mac android apk反编译
  9. 极路由 安装php,极路由B70刷固件详细步骤说明
  10. 基于java的教师教学评价管理系统