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;

要使用时,调用该过程即可

原文地址:https://www.cnblogs.com/hssbsw/p/1455787.html