要实现使用系统自带文件操作,如文件的复制,删除,移动等等,我们就需要利用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;
要使用时,调用该过程即可