利用API中SHFileOperation()函數來處理文件

6、Windows 文件操作:SHFileOperation 函数深度解析 本文深入解析了Windows API中的SHFileOperation函数文件操作中的应用与常见问题,涵盖文件重命名限制、返回码不准确、长文件处理难题以及文件名映射对象的使用机制。通过实用工具函数和自定义结构体,提供了处理错误消息、枚举重命名文件及优化代码的完整方案,并总结了不同操作场景下的注意事项与最佳实践,帮助开发者提升文件操作的稳定性和可靠性。 阅读详情
以下文章來源於CSDN:

在Windows中实现文件的操作主要有两种方法。一种是直接利用CFile 类的操作成员函数来实现,它要用到对于文件操作的底层操作方式,如READ、WRITE、GETLENTH等,并且要直接操作文件的属性,如创建、读、写等;而且,其缓冲区的设置对于文件的大小和不同的计算机是不同的,特别是对于长度很大的数据库进行备份,很难达到最佳效果。

---- 另一种有效的方式是利用Win32外壳来实现这些对于文件的操作。它可以实现包括文件的拷贝、更名、移动及删除等,并且可以支持通配符(如*和?),也可以直接对一个目录或目录树进行操作。

---- 本文分析了Win32外壳API对于文件操作的原理,并利用Visual C++6.0实现文件的拷贝操作。

---- 一、 原理与结构

---- Windows95/NT中提供了一个API函数SHFileOperation(),它只有一个指向SHFILEOPSTRUCT结构的参数。SHFileOperation()函数的原形如下:

---- WIN SHELL API int WINAPI SHFileOperation (LPSHFILEOPSTRUCT lpFIleOp);

---- LPSHFILEOPSTRUCT结构包含有进行文件操作的各种信息,其具体的结构如下:

Typedef struct _ShFILEOPSTRUCT {
HWND hWnd; //消息窗口
UINT wFunc; //操作类型
LPCSTR pFrom; //源文件及路径
LPCSTR pTo; //目标文件及路径
FILEOP_FLAGS fFlags; //操作与确认标志
BOOL fAnyOperationsAborted; //操作选择位
LPVOID hNameMappings; //文件映射
LPCSTR lpszProgressTitle; //进度窗口标题
} SHFILEOPSTRUCT, FAR* LPSHFILEOPSTRUCT;

---- 在这个结构中,有几个成员很重要。hWnd是指向发送消息的窗口,pFrom与pTo是进行文件操作的源文件名和目标文件名,它包含文件的路径,对于多个文件名之间用NULL作为间隔,并且可以支持通配符*和?。如源文件或目录有两个,则应是:

char pFrom[]="c://windows//command/0c://dos//himem.sys/0"

---- 它表示对c:/windows/command目录下的所有文件和c:/dos/himem.sys文件进行操作。'//'是C语言中的'/'的转义符, '/0'则是NULL。wFunc 是结构中的重要成员,它指出将要进行的操作类型,是下面的操作类型之一:

---- FO_COPY: 拷贝文件pFrom到pTo 的指定位置。

---- FO_RENAME: 将pFrom的文件名更名为pTo的文件名。

---- FO_MOVE: 将pFrom的文件移动到pTo的地方。

---- FO_DELETE: 删除pFrom指定的文件。

---- 在进行文件拷贝、移动或删除时,如果需要的时间很长,则会在进行的过程中出现一个无模式的对话框,可以显示执行的进度和执行的时间,以及正拷贝移动或删除的文件名,成员lpszProgressTitle显示此对话框的标题。fFlags是在进行文件操作时的过程和状态控制标识。它主要有如下一些标识,也可以是其组合。

---- FOF_FILESONLY:不执行通配符,只执行文件.

---- FOF_ALLOWUNDO:保存 UNDO信息,以便恢复.

---- FOF_NOCONFIRMATION: 在出现目标文件已存在的时候,如果不设置此项,则它会出现确认是否覆盖的对话框,设置此项则自动确认,进行覆盖,不出现对话框。

---- FOF_NOERRORUI: 设置此项后,当文件处理过程中出现错误时,不出现错误提示,否则会进行错误提示。

---- FOF_RENAMEONCOLLISION: 当已存在文件名时,对其进行更换文件名提示。

---- FOF_SILENT: 不显示进度对话框。

---- FOF_WANTMAPPINGHANDLE: 要求SHFileOperation()函数返回正处于操作状态的实际文件列表,文件列表名柄保存在hNameMappings成员中。 SHFILEOPSTRUCT将包含一个SHNAMEMAPPING结构的数组,此数组保存由SHELL计算的每个处于操作状态的文件的新旧路径。

---- 二、 实例操作

---- 本文就一个Visual C++程序来实现文件复制的实例。首先建立一个单文档界面filecopy,然后在主框架中新增一个工具条变量m_wndMyToolBar,新建一个工具条IDR_MYTOOLBAR,设置一个工具消息ID_FILECOPY,并在主框架MainFrm.cpp的OnCreate()成员函数中加入工具栏。

if(!m_wndMyToolBar.Create(this)||
!m_wndMyToolBar.LoadToolBar(IDR_MYTOOLBAR))
{
TRACE("can not create the FileToolBar!/n");
return -1;
}

---- 通过中视类操作工具条IDR_MYTOOL,利用ClassWizard为其消息ID_FILECOPY新增消息处理函数OnFilecopy。然后在处理函数中加入下面程序。

void OnFilecopy()
{
int nOk;
char strSrc[]="c://dos/0c://pwin98//command/0";
//可以改变源路径
char strDst[]="c://temp/0";
//设置目的路径
char strTitle[]="File copying";
//进度题头
SHFILEOPSTRUCT FileOp;
FileOp.hwnd=m_hWnd;
FileOp.wFunc=FO_COPY;
//执行文件拷贝
FileOp.pFrom=strSrc;
FileOp.pTo=strDst;
FileOp.fFlags=FOF_ALLOWUNDO;
FileOp.hNameMappings=NULL;
FileOp.lpszProgressTitle=strTitle;

nOk=SHFileOperation(&FileOp);
if(nOk)
TRACE("There is an error: %d/n",nOk);
else
TRACE("SHFileOperation finished successfully/n");

if(FileOp.fAnyOperationsAborted)
TRACE("Operation was aborted!/n");
}

---- 三、 结束语

---- 利用Windows API进行程序文件操作设计,它直接调用Windows操作系统中的外壳,它的处理过程与Windows95/98/NT中的处理过程是一致的有利于我们在系统程序设计中保持与操作系统的一致性;同时,由于在文件处理中它是直接调用Windows API函数,因此不需要其它应用程序动态链接库DLL的支持。

---- 在各种开发软件中,都提供了对于文件的各种操作方式,但是它必须利用到文件系统较为深入的知识,而且对于其操作的直观性方面也需要开发者进一步地设计,因此利用操作系统SHELL进行程序设计,不失是一种好的设计方法。

基于SHFileOperation实现文件复制与回收站删除的Windows API实战 本文还有配套的精品资源,点击获取 简介:在Windows编程中, 函数是实现文件操作的核心API之一,可用于复制、移动、重命名和删除文件等任务,并支持将文件删除至回收站。本文通过VB6示例详细讲解如何调用 函数,配置 结构体,设置 操作类型(如FO_COPY、FO_DELETE)和 标志位(如FOF_ALLOWUNDO、FOF_SILENT),实现静默复制文件和安全删除到回收站的功能。结合 的API调用机制,帮助开发者构建类资源管理器的文件操作功能,提升应用程 阅读详情

相关推荐

VB利用SHFileOperation调用系统对话框实现对文件拷贝、删除、重命名

VB利用SHFileOperation调用系统对话框实现对文件拷贝、删除、重命名

在VBA中调用Windows API的方法

在VBA中使用Windows API VBA是一种强大的编程语言,可用于自定义Microsoft Office解决方案。通过使用VBA处理一个或多个Office应用程序对象模型,可以容易地修改Office应用程序的功能或者能够使两个或多个Office应用程序协同工作以完成单个应用程序无法完成的任务。然而,使用VBA仅能控制操作系统的一小部分。Windows API提供了控制操作系统绝大多数方面的功...

allan_012的博客 9124

SHFileOperation文件操作

SHFileOperation文件操作

Windows默认文件操作(SHFileOperation)

要实现使用系统自带文件操作,如文件的复制,删除,移动等等,我们就需要利用API函数(别忘记引用ShellAPI)来进行操作: 该函数在C语言中的声明:WINSHELLAPI int WINAPI SHFileOperation(LPSHFILEOPSTRUCT lpFileOp); 在Delphi中的声明:function SHFileOperation(const...

weixin_30496751的博客 178

shfileoperation 提示无法删除文件的有关问题

shfileoperation 提示无法删除文件的问题 看了几篇关于用shfileoperation删除文件夹及其下文件的提问,大概知道是pFrom路径问题,但还是解决不了,奇怪的是有些提问人最后声称解决了,但也没有说出自己的代码错在哪里,郁闷,我解决了一定把完整代码贴出来,以下我的代码,请帮忙看看哪里有问题 bool DeleteDirectory(CString strName) {

willis 3318

解密SHFileOperation

通过本文的介绍,我们深入了解了SHFileOperation这一神奇的Windows文件操作工具。它不仅可以为程序猿提供便捷的文件操作功能,还能为普通用户提供友好的文件管理体验。

技术研究中心 686

SHFileOperation()函数移动,复制,删除文件

(转载于:http://hi.baidu.com/%B4%E7%B2%DD%D0%C4_/blog/item/e3a8200a28f6ea3ab1351d38.html) 总结一下SHFileOperation的用法,希望对大家有用 //删除文件或者文件夹 bool DeleteFile(char * lpszPath) { SHFILEOPSTRUCT FileOp={0}; Fil

ghevinn欢迎您光临 7288

关于SHFileOperation函数的补充

今天看到一个关于SHFileOperation函数使用的介绍,发现下面一些有用的资料,都是些之前未仔细了解的方面,这里把他们记录下来,留待以后查阅参考。 fFlags成员标志间的关系 标志 抑制的对话框 相关性与优先级 FOF_MULTIDESTFILES 无 无 FOF_FILESONLY

TU2的专栏 1万+

EXCEL VBA里的API函数SHFileOperation文件操作

【代码】EXCEL VBA里的API函数SHFileOperation文件操作。

码猩的博客 851

SHFileOperation函数

Windowsshellapi文件中定义了一个名为SHFileOperation()的外壳函数,用它可以实现各种文件操作,如文件的拷贝、删除、移动等,该函数使用起来非常简单,它只有一个指向SHFILEOPSTRUCT结构的参数。使用SHFileOperation()函数时只要填写该专用结构--SHFILEOPSTRUCT,告诉Windows执行什么样的操作,以及其它重要信息就行了。SHFile

jjchao的专栏 775

SHFileOperation 操作文件,本例拷贝文件

char*版本 SHFILEOPSTRUCTA fop = { 0 }; fop.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR; fop.wFunc = FO_COPY;//选择执行类型,FO_COPY,FO_DELETE,FO_RENAME,FO_MOVE四种 fop.pFrom = "d:\\test.txt"; fop.pTo = "c:\\tes.

1589

SHFileOperation的用法

Windowsshellapi文件中定义了一个名为SHFileOperation()的外壳函数,它可以用来实现各种文件操作,例如文件的拷贝、删除和移动等,该函数使用起来非常简单,它只有一个指向SHFILEOPSTRUCT结构的参数。使用SHFileOperation()函数时只要填写该专用结构--SHFILEOPSTRUCT,告诉Windows执行什么样的操作,以及其它重要信息就行了。SHFi...

weixin_30483697的博客 1452

SHFileOperation函数使用的介绍

今天看到一个关于SHFileOperation函数使用的介绍,发现下面一些有用的资料,都是些之前未仔细了解的方面,这里把他们记录下来,留待以后查阅参考。 fFlags成员标志间的关系 标志 抑制的对话框 相关性与优先级 FOF_MULTIDESTFILES 无 无 FOF_FILESONLY

bilinxing_的专栏 2208

C++ SHFileOperation实现文件文件夹拷贝、删除、重命名

/// <summary> /// 拷贝文件 /// </summary> /// <param name="srcFile"></param> /// <param name="destFile"></param> /// <returns></returns> int FastCopyFile(const char* srcFile, const cha...

狂奔之林的博客 1646

SHFileOperation方法拷贝文件

using System;using System.Collections.Generic;using System.Text;using System.IO;using System.Runtime.InteropServices; namespace ConsoleApplication1{ class Program { static void M...

baifa1235的博客 417

SHFileOperation

<br />Windows95/NT中提供了一个API函数SHFileOperation(),它只有一个指向SHFILEOPSTRUCT结构的参数。SHFileOperation()函数的原形如下: <br /><br />---- WIN SHELL API int WINAPI SHFileOperation (LPSHFILEOPSTRUCT lpFIleOp); <br /><br />---- LPSHFILEOPSTRUCT结构包含有进行文件操作的各种信息,其具体的结构如下: <br /><br

haiou327’blog 1201

SHFileOperation()的外壳函数,用它可以实现各种文件操作,如文件的拷贝、删除、移动等

Windowsshellapi文件中定义了一个名为SHFileOperation()的外壳函数,用它可以实现各种文件操作,如文件的拷贝、删除、移动等,该函数使用起来非常简单,它只有一个指向SHFILEOPSTRUCT结构的参数。使用SHFileOperation()函数时只要填写该专用结构--SHFILEOPSTRUCT,告诉Windows执行什么样的操作,以及其它重要信息就行了。SHFile

thanklife的专栏 1275

Windows API——SHFileOperation——文件操作

1 int SHFileOperation( LPSHFILEOPSTRUCT lpFileOp); 如果执行成功返回0. 1 typedef struct _SHFILEOPSTRUCT { 2 HWND hwnd;//指向发送消息的窗口 3 UINT wFunc;//执行的操作 4 LPCTSTR pFrom;//源文件名 5 LPCTSTR pTo;//目标文件

jiangqin115的专栏 1129
上一篇: 智能算法学习笔记
下一篇: 进行DLL注入的三种方法
zerray
博客等级 码龄23年 16粉丝 25原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值