SHFileOperation DeleteFolder

SHFileOperation DeleteFolder分类:C/C++BOOLDeleteFolder(LPCTSTRlpszPath){  SHFILEOPSTRUCTFileOp; ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));  FileOp.fFlags=FOF_NOCONFIRMATION;  FileO

大家好,又见面了,我是你们的朋友全栈君。

分类: 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

 


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161010.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月18日 下午9:00
下一篇 2022年7月18日 下午9:00


相关推荐

  • 能直接下载到u盘的电影网站_DvD光盘

    能直接下载到u盘的电影网站_DvD光盘低调地来发个小东东,现在的verycd,没有铜2就不能下载了,下载的链接都是被隐藏掉了(该内容尚未提供权利证明,无法提供下载。)不用铜光盘就能下载的方法?还在为没铜光盘或者没时间刷铜盘的朋友需要可以试试这个之前做的东东,现在共享出来(当然了,如果你看到了这篇文章的话)做得可能有些粗简,但还能用,不打算再优化了,至于浏览器扩展什么的也不打算写了,需要就凑合着用吧百度网…

    2022年8月10日
    8
  • idea设置背景黑色_idea主题样式设置

    idea设置背景黑色_idea主题样式设置1、File=>Settings2、Appearance=>Darcula

    2022年4月19日
    64
  • epoll使用具体解释(精髓)

    epoll使用具体解释(精髓)

    2021年11月16日
    70
  • python 安装CV2

    通常一个指令pipintsallopencv-python大多数的情况下,是可以的安装成功CV2,可是有时,这个指令安装的pip会出现CV2版本与python安装的版本,不匹配导致,你安装的opencv不成功,个人示例:1.先更新pippython-mpipinstall–upgradepip 2.从清华的镜像 `https://pypi.tuna.tsingh…

    2022年4月8日
    205
  • word里面给公式自动编号

    word里面给公式自动编号实现 word 里面公式的自动编号 1word 里面插入公式按下 alt 即可进入 latex 公式编辑框 2 公式自动编号 1 公式后面输入 2 点击插入 文档部件 域进入域之后 点编号 AutoNum 确认就出现 3 复制 1 光标移到 1 后面 光标务必要在公式里面 按 Enter 回车 4 到其他公式里面 粘贴刚复制的 1 自动出现编号 在 enter 如上即可

    2026年3月18日
    2
  • WebSocket实现简单的web聊天室

    WebSocket实现简单的web聊天室WebSocket实现简单的web聊天室1.需要Tomcat7.0所以服务器2.需要JDK7.03.手工加入Tomcat7.0中lib目录下的一下三个包catalina.jar、tomcat-coyote.jar、websocket-api.jar4.项目部署后,请将服务器中当前项目下的catalina.jar、tomcat-coyote.jar、websocket-api

    2022年6月22日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号