• SHFileOperation在拷贝、删除文件时显示运行进度(转)


     

    可以很容易地调用API函数CopyFile, DeleteFile, 以及MoveFile来复制、删除、移动文件,这些功能相当容易使用,但是他们不显示飞行文件夹动画。下面是每一个API的例子。

    //复制SOURCE.TXT到DEST.TXT,FALSE参数告诉windows如果文件DEST.TXT
    //已经存在则复制失败,CopyFile的返回值是BOOL类型
    if( CopyFile("C:\\SOURCE.TXT","C:\\DEST.TXT", FALSE) == FALSE)
    Application->MessageBox("CopyFile failed", "Error", MB_OK);

    //如果移动或删除失败则返回FALSE
    MoveFile("C:\\SOURCE.TXT","C:\\WINDOWS\\TEMP\\DEST.TXT");
    DeleteFile("C:\\SOURCE.TXT");


    这些功能很容易使用,但是不幸但是他们不显示飞行文件夹动画。为了显示动画,你必须使用SHFileOperation 这个API函数。下面是用SHFileOperation完成上面的操作的例子,注意复制和移动操作一定要指定目标文件夹。

    //确认你包含了头文件SHELLAPI.H
    //如果你好奇的话,这个文件地位置在INCLUDE\WIN32目录下
    #include <shellapi.h>

    // 复制SOURCE.TXT到DEST.TXT;
    char *From = "C:\\SOURCE.TXT\0";
    char *To = "C:\\DEST.TXT\0";
    SHFILEOPSTRUCT op;
    ZeroMemory(&op, sizeof(op));
    op.hwnd = Handle; // 主窗体或应用程序的句柄
    op.wFunc = FO_COPY;
    op.pFrom = From;
    op.pTo = To;
    op.fFlags= 0;
    SHFileOperation( &op);

    // 移动SOURCE.TXT到windows的临时目录
    char *From = "C:\\SOURCE.TXT\0";
    char *To = "C:\\WINDOWS\\TEMP\0";
    SHFILEOPSTRUCT op;
    ZeroMemory(&op, sizeof(op));
    op.hwnd = Handle;
    op.wFunc = FO_MOVE;
    op.pFrom = From;
    op.pTo = To;
    op.fFlags= 0;
    SHFileOperation( &op);

    //把所有的临时文件删除到回收站
    char *File = "C:\\windows\\temp\\*.TMP\0";
    SHFILEOPSTRUCT op;
    ZeroMemory(&op, sizeof(op));
    op.hwnd = Handle;
    op.wFunc = FO_DELETE;
    op.pFrom = File;
    op.fFlags= FOF_ALLOWUNDO;
    SHFileOperation( &op);

    // 复制根目录所有的文本文件到临时目录。
    char *From = "C:\\*.TXT\0";
    char *To = "C:\\WINDOWS\\TEMP\0";
    SHFILEOPSTRUCT op;
    ZeroMemory(&op, sizeof(op));
    op.hwnd = Handle;
    op.wFunc = FO_COPY;
    op.pFrom = From;
    op.pTo = To;
    op.fFlags= 0;
    SHFileOperation( &op);



    注意:
    1:当你指定FO_DELETE操作的时候,如果fFlags包含FOF_ALLOWUNDO,文件将送到回收站,否则它们将被删除.

    2:op结构的项目pFrom和pTo是字符指针,而不是数组.它们必须指向一个字符串,因为结构不含有任何存储空间,不能这样做:

    op.pFrom = "C:\\*.TXT";
    op.pTo = "C:\\TEMP";

    3:在文件名字符串中注意到额外的终止符0(在字符串中的'\0')。MSDN文档表明pTo和pFrom字符串一定是双重零结束。

    4:pFrom和pTo指向的内存可以包含多个字符串,字符串之间用0分隔,最后也要用双重0结束,下面是一个例子:

    char *From = "C:\\*.txt\0C:\\*.log\0C:\\*.tmp\0";
    op.pFrom = From;

    //也可以用空白分隔
    char *From = "C:\\*.txt\0"
    "C:\\*.log\0"
    "C:\\*.tmp\0";

    5:当复制或者移动文件的时候,在fFlags参数中包含FOF_RENAMEONCOLLISION将阻止函数改写现存的文件,shell将建立名字叫做“复件原文件名”的复制品(资源管理器就是这样做的).

    6:你能也指定FO_RENAME作为wFunc参数.fFlags参数能包含很多其它高级方式,更多信息请参阅WIN32.HLP文件.

     

    //另

    将SHFileOperation   中的SHFILEOPSTRUCT   中的fFlags加上FOF_SILENT,可屏蔽进度条

     

  • 相关阅读:
    struts2+Hibernate4+spring3+EasyUI环境搭建之四:引入hibernate4以及spring3与hibernate4整合
    struts2+Hibernate4+spring3+EasyUI环境搭建之三:引入sututs2以及spring与sututs2整合
    struts2+Hibernate4+spring3+EasyUI环境搭建之二:搭建spring
    Log4j
    【maven学习】构建maven web项目
    struts2+Hibernate4+spring3+EasyUI环境搭建之一:准备工作
    高版本myeclipse破解以及优化
    Eclipse&Myeclipse安装反编译插件
    Flask源码阅读-第四篇(flaskapp.py)
    Flask源码阅读-第三篇(flask\_compat.py)
  • 原文地址:https://www.cnblogs.com/rainbowzc/p/1501642.html
Copyright © 2020-2023  润新知