当前位置:首页 > 编程学习 > SHFileOperation介绍

SHFileOperation介绍

编程学习2007-04-2960790

SHFileOperation

函数功能描述:文件操作,与 Shell 的动作相同.

函数原型:

#include<shellapi.h>
WINSHELLAPI int WINAPI  SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);

参数:

typedef struct _SHFILEOPSTRUCT
{
    HWND            hwnd;    //父窗口句柄
    UINT            wFunc;  //要执行的动作
    LPCTSTR          pFrom;  //源文件路径,可以是多个文件
    LPCTSTR         pTo;     //目标路径,可以是路径或文件名
    FILEOP_FLAGS    fFlags; //标志,附加选项
    BOOL            fAnyOperationsAborted; //是否可被中断
    LPVOID           hNameMappings;         //文件映射名字,可在其    它 Shell 函数中使用
    LPCTSTR          lpszProgressTitle; // 只在 FOF_SIMPLEPROGRESS 时,指定对话框的标题。 
} SHFILEOPSTRUCT,  FAR *LPSHFILEOPSTRUCT;

===================

vb.net

Public Structure SHFILEOPSTRUCT
    Dim hwnd  As IntPtr
    Dim wFunc As Integer
    Dim pFrom As String
    Dim pTo As  String
    Dim fFlags As Short
    Dim fAnyOperationsAborted As Integer
    Dim  hNameMappings As IntPtr
    Dim lpszProgressTitle As String
End Structure
Public Declare Function SHFileOperation Lib "shell32.dll" Alias  "SHFileOperationA" (ByRef lpFileOp As SHFILEOPSTRUCT) As Integer

======================

vb:

Type SHFILEOPSTRUCT 
    hWnd As Long
    wFunc As Long
    pFrom As String '必须用 pFrom & vbNullChar &  vbNullChar 
    pTo As String '同pFrom 
    fFlags As Integer
    fAnyOperationsAborted As Boolean
    hNameMappings As Long
    lpszProgressTitle As String
End Type 
Public Declare Function  SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As  SHFILEOPSTRUCT) As Long


=======================

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 。


例子:
1.  将 C:\Test.txt 拷贝到 D:\

SHFILEOPSTRUCT lpsh;
ZeroMemory(&lpsh,sizeof(lpsh));
lpsh.hwnd= HWND_DESKTOP;
lpsh.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS  ;
lpsh.wFunc=FO_COPY; // FO_MOVE 则是移动
lpsh.pFrom= "C:\Test.txt";    
lpsh.pTo  = "D:\"
if( 0 != SHFileOperation(&lpsh))
{
    AfxMessageBox("复制文件出错,请检查");
    return ;
}

2.  删除 D:\Test.txt

SHFILEOPSTRUCT lpsh;
ZeroMemory(&lpsh,sizeof(lpsh));
lpsh.hwnd= HWND_DESKTOP;
lpsh.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS ;
lpsh.wFunc=FO_DELETE;
lpsh.pFrom= "D:\Test.txt";   
if( 0 !=  SHFileOperation(&lpsh))
{
    AfxMessageBox("删除文件出错,请检查");
    return ;
}


3.重命名

SHFILEOPSTRUCT lpsh;
ZeroMemory(&lpsh,sizeof(lpsh));
lpsh.hwnd= HWND_DESKTOP;
lpsh.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS ;
lpsh.wFunc=FO_RENAME;
lpsh.pFrom= "D:\Test.txt";   
lpsh.pTo =  "D:\Test2.txt";
if( 0 != SHFileOperation(&lpsh))
{
    AfxMessageBox("重命名文件出错!");
    return ;
}


4.VB

Public Declare Function SHFileOperation Lib "shell32.dll" Alias  "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Public Const FO_COPY  = &H2 
Public Const FOF_ALLOWUNDO = &H40
Public Sub ShellCopyFile(Source As String, Dest As String) 
    Dim result As  Long
    Dim fileop As SHFILEOPSTRUCT 
    With fileop 
        .hwnd = 0  
        .wFunc = FO_COPY 
        .pFrom = Source & vbNullChar & vbNullChar  
        .pTo = Dest & vbNullChar & vbNullChar 
        .fFlags =  FOF_ALLOWUNDO 
    End With
    result = SHFileOperation(fileop)
   
    If result <> 0 Then
        'Msgbox the error that occurred in the API. 
        MsgBox Err.LastDllError,  vbCritical Or vbOKOnly 
    Else
        If fileop.fAnyOperationsAborted <>  0 Then
        MsgBox "Operation Failed", vbCritical Or vbOKOnly 
    End If
End Sub


扫描二维码推送至手机访问。

版权声明:本文由海阔天空发布,如需转载请注明出处。

本文链接:https://apull.net/html/20070429101.html

分享给朋友:

相关文章

[转] 深入探讨C++中的引用

[转] 深入探讨C++中的引用

  摘要:介绍C++引用的基本概念,通过详细的应用分析与说明,对引用进行全面、透彻地阐述。  关键词:引用,const,多态,指针  引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖引玉的作用。  引用简介  引用就是某一变量(目标)的一个别名,...

VB/VB.net 只允许运行一个实例

VB/VB.net 只允许运行一个实例

VB/VB.net  只允许运行一个实例       by:  Apull  VB中的实现方法VB如何防止程序被重复加载,也就是只允许运行一个实例,一般有2种方法。一,直接用VB提供的APP对象的PrevInstance方法。PrevInstance的返回值为True则说明已经有一个实力在运行。If App.PrevInstance Then Msgbox "已经有一个实例在运行" End if这个...

致面向对象技术初学者的一封公开信

致面向对象技术初学者的一封公开信

 致面向对象技术初学者的一封公开信 Alistair Cockburn 著(1996 年2 月),袁峰 译介绍 首先我要解释一下为什么会写这封公开信。这似乎已经成了一种习惯,但这个步骤还是需要的。过去6 年中, 我曾经无数次地在饭店、酒吧、旅店大厅等各种地方以同一种方式度过愉快而漫长的夜晚:和同样追求真理、光明和智慧的伙伴一起探讨面向对象的真谛。现在,我已经可以回答很多当年我遇到的问题。这些同样的问题也在困扰着我的一位新同事,在一家饭店里,我花了整整一个晚上和他讨...

VBScript 错误信息

VBScript 错误信息

错误代码 信息5 无效的过程调用或参数6 溢出7 内存不够9 下标越界10 数组长度固定或临时锁定11 被零除13 类型不匹配14 字符串空间溢出28 堆栈空间溢出35 Sub或Function未定义48 加载D...