• 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;

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

  • 相关阅读:
    .net Winform 32位桌面应用程序突破系统2G内存限制,解决内存溢出问题
    .Net Core WebAPI Swagger Failed to load API definition
    MySql 安装详细步骤
    Vue ElementUI 按需引入提示Cannot find module 'babelpresetes2015'
    复制label标签上的文本
    3D游戏的碰撞检测是如何实现的?
    flex布局定位二
    flex布局定位一
    k8s工作负载、服务、pod
    应用内moniter
  • 原文地址:https://www.cnblogs.com/hssbsw/p/1455787.html
Copyright © 2020-2023  润新知