今天心血来潮,想搞搞文件操作,就去翻翻以前的笔记,看到 shfileoperation
这个东西。以前总觉得这玩意儿挺神秘,今天就来好好扒一扒它。
我得说,这东西跟平时用的 CopyFileEx
什么的不太一样。CopyFileEx
只能搞文件,想复制个文件夹? 没门!你得自己去一个个找文件,麻烦死。但 shfileoperation
就厉害,文件、文件夹,一把抓,全都能搞定。
我一开始还挺懵,这东西怎么用?后来发现,也挺简单的。它主要就是靠一个叫 SHFILEOPSTRUCT
的结构体。这结构体里头,最关键的几个东西:
- wFunc: 告诉它你要干复制、删除、移动,还是别的
- pFrom: 你要操作的文件的路径。
- pTo: 你要把文件弄到哪儿去。
- fFlags: 一些额外的选项,可以控制操作的具体行为。
我先试试复制文件。把 wFunc
设置成 FO_COPY
,然后把 pFrom
和 pTo
填上文件的路径,就完事。跑起来一看,文件还真复制过去!
然后我又试试复制文件夹,也一样好使。这下我就乐,以后再也不用自己去遍历文件夹,省多少事!
不过这里头有个坑,我得提醒一下。pFrom
这里,如果你要操作多个文件,得用两个零 (\0\0
) 来结尾。我一开始不知道,结果折腾半天,后来才发现是这个问题。
我还发现,shfileoperation
这东西,它返回 0 表示成功,返回别的就表示失败。不过光知道成功失败还不够,有时候我还想知道具体是哪儿出错。后来我查查,发现可以通过 GetLastError
来获取更详细的错误信息。
shfileoperation
这东西还是挺强大的,能实现各种文件操作。不过用的时候也得小心点,别掉坑里。这回实践,让我对文件操作又有更深的理解,以后再遇到类似的问题,我就不用慌!
对,使用这个函数前需要包含头文件:
#include <shellapi.h>
然后,如果需要使用到一些相关的API也需要引入库文件:
#pragma comment (lib,"*")
实践总结
这回的实践让我对文件操作有新的认识,虽然遇到一些小坑,但最终还是顺利搞定。以后再也不怕复杂的文件操作!