SHFileOperation

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

SHFileOperation()函数的原形为:   

  WINSHELLAPI int WINAPI SHFileOperation (LPSHFILEOPSTRUCT lpFIleOp); 

  函数中参数类型为一个LPSHFILEOPSTRUCT结构,它包含有进行文件操作的各种信息,其具体的结构如下:   

  Typedef struct _ShFILEOPSTRUCT 

  { 

   HWND hWnd; //消息发送的窗口句柄; 

   UINT wFunc; //操作类型 

   LPCSTR pFrom; //源文件及路径 

   LPCSTR pTo; //目标文件及路径 

   FILEOP_FLAGS fFlags; //操作与确认标志 

   BOOL fAnyOperationsAborted; //操作选择位 

   LPVOID hNameMappings; //文件映射 

   LPCSTR lpszProgressTitle; //文件操作进度窗口标题 

  }SHFILEOPSTRUCT, FAR * LPSHFILEOPSTRUCT;    

  在这个结构中,hWnd是指向发送消息的窗口句柄

pFrom与pTo是进行文件操作的源文件路径和目标文件路径,需要双终止符‘\0’字符串中的""是C语言中的''的转义符,'/0'则是NULL),如果用到CString最好采取开辟内存复制的方法。pFrom和pTo都支持通配符*和?。

wFunc 它代表着函数将要进行的操作类型,它的取值为如下: 

  FO_COPY: 拷贝文件pFrom到pTo 的指定位置。 

  FO_RENAME: 将pFrom的文件名更名为pTo的文件名。 

  FO_MOVE: 将pFrom的文件移动到pTo的地方。 

  FO_DELETE: 删除pFrom指定的文件。 
lpszProgressTitle显示此对话框的标题:使用该函数进行文件拷贝、移动或删除时,如果需要的时间很长,则程序会自动在进行的过程中出现一个无模式的对话框(Windows操作系统提供的文件操作对话框),用来显示执行的进度和执行的时间,以及正在拷贝、移动或删除的文件名。

fFlags是在进行文件操作时的过程和状态控制标识(貌似还有优先级的问题)。它主要有如下一些标识,也可以是其组合: 

  FOF_FILESONLY:执行通配符,只执行文件; 

  FOF_ALLOWUNDO:保存UNDO信息,以便在回收站中恢复文件; 

  FOF_NOCONFIRMATION:在出现目标文件已存在的时候,如果不设置此项,则它会出现确认是否覆盖的对话框,设置此项则自动确认,进行覆盖,不出现对话框。 

  FOF_NOERRORUI:设置此项后,当文件处理过程中出现错误时,不出现错误提示,否则会进行错误提示。    

  FOF_RENAMEONCOLLISION:Give the file being operated on a new name in a move, copy, or rename operation if a file with the target name already exists.

  FOF_SILENT:不显示进度对话框。 

  FOF_WANTMAPPINGHANDLE:要求SHFileOperation()函数返回正处于操作状态的实际文件列表,文件列表名柄保存在hNameMappings成员中。 

同时也有一个重要的应用就是:

在进行文件操作时,可以使用CFile类中的Remove()函数来删除一个文件,但是这样的操作将永久性的删除该文件,不能在必要的时候再恢复该文件,解决这个问题的唯一方法就是把文件送到Windows系统中的回收站(Recycle Bin)里面,而不是简单的永久性删除它,这样用户就可以在必要的时候恢复这个文件。用这个函数实现编程来实现Windows回收站的文件存取操作。

在使用该函数删除文件时必须设置SHFILEOPSTRUCT结构中的神秘FOF_ALLOWUNDO标志,这样才能将待删除的文件拷到Recycle Bin,从而使用户可以撤销删除操作。需要注意的是,如果pFrom设置为某个文件名,用FO_DELETE标志删除这个文件并不会将它移到Recycle Bin,甚至设置FOF_ALLOWUNDO标志也不行,在这里你必须使用全路径名,这样SHFileOperation才会将删除的文件移到Recycle Bin。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值