Windows默认文件操作(SHFileOperation)
要实现使用系统自带文件操作,如文件的复制,删除,移动等等,我们就需要利用API函数(别忘记引用ShellAPI)来进行操作:
该函数在C语言中的声明:WINSHELLAPI int WINAPI SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);
在Delphi中的声明:function SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; stdcall;
如是delphi在uses 中加入SHELLAPI
在使用该函数前需要对TSHFileOpStruct进行赋值,其中TSHFileOpStruct是一种类似记录类型的类型,子类如下: HWND hwnd; //父窗口句柄 UINT wFunc; //要执行的动作 LPCTSTR pFrom; //源文件路径,可以是多个文件 LPCTSTR pTo; //目标路径,可以是路径或文件名 FILEOP_FLAGS fFlags; //标志,附加选项 BOOL fAnyOperationsAborted; //是否可被中断 LPVOID hNameMappings; //文件映射名字,可在其它 Shell 函数中使用 LPCTSTR lpszProgressTitle; // 只在 FOF_SIMPLEPROGRESS 时,指定对话框的标题。
wFunc 可以为: FO_MOVE 0x0001 移动文件 FO_COPY 0x0002 复制文件 FO_DELETE 0x0003 删除文件,只使用 pFrom FO_RENAME 0x0004 文件重命名
fFlags可以为: FOF_MULTIDESTFILES 0x0001 //pTo 指定了多个目标文件,而不是单个目录 FOF_CONFIRMMOUSE 0x0002 FOF_SILENT 0x00044 // 不显示一个进度对话框 FOF_RENAMEONCOLLISION 0x0008 // 碰到有抵触的名字时,自动分配前缀 FOF_NOCONFIRMATION 0x0010 // 不对用户显示提示 FOF_WANTMAPPINGHANDLE 0x0020 // 填充hNameMappings字段,必须使用SHFreeNameMappings释放 FOF_ALLOWUNDO 0x0040 // 允许撤销 FOF_FILESONLY 0x0080 // 使用 *.* 时, 只对文件操作 FOF_SIMPLEPROGRESS 0x0100 // 简单进度条,意味者不显示文件名。 FOF_NOCONFIRMMKDIR 0x0200 // 建新目录时不需要用户确定 FOF_NOERRORUI 0x0400 // 不显示出错用户界面 FOF_NOCOPYSECURITYATTRIBS 0x0800 // 不复制 NT 文件的安全属性 FOF_NORECURSION 0x1000 // 不递归目录 返回值: 函数成功返回0,失败返回非0。
我们常先自定义一个函数或者过程来避免对TSHFIleOpStruct的繁杂的赋值,自定义过程如下:
procedure MoveFileToDustBin(FileName:String); var T:TSHFileOpStruct; begin FillChar(T,SizeOf(TSHFileOpStruct),#0); with T do begin Wnd:=0; wFunc:=FO_Delete; pFrom:=PChar(FileName); fFlags:=FOF_ALLOWUNDO; end;
SHFileOperation(T); end;
要使用时,调用该过程即可