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

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

总结一下SHFileOperation的用法,希望对大家有用

 

/删除文件或者文件夹
bool DeleteFile(char * lpszPath) 
{ 
SHFILEOPSTRUCT FileOp={0}; 
FileOp.fFlags = FOF_ALLOWUNDO |   //
允许放回回收站
      FOF_NOCONFIRMATION; //
不出现确认对话框
FileOp.pFrom = lpszPath; 
FileOp.pTo = NULL;      //
一定要是NULL
FileOp.wFunc = FO_DELETE;    //
删除操作
return SHFileOperation(&FileOp) == 0; 
}

//复制文件或文件夹
bool CopyFile(char *pTo,char *pFrom)
{
SHFILEOPSTRUCT FileOp={0}; 
FileOp.fFlags = FOF_NOCONFIRMATION|   //
不出现确认对话框
      FOF_NOCONFIRMMKDIR ; //
需要时直接创建一个文件夹,不需用户确定
FileOp.pFrom = pFrom; 
FileOp.pTo = pTo; 
FileOp.wFunc = FO_COPY; 
return SHFileOperation(&FileOp) == 0; 
}

//移动文件或文件夹
bool MoveFile(char *pTo,char *pFrom)
{
SHFILEOPSTRUCT FileOp={0}; 
FileOp.fFlags = FOF_NOCONFIRMATION|   //
不出现确认对话框 
      FOF_NOCONFIRMMKDIR ; //
需要时直接创建一个文件夹,不需用户确定
FileOp.pFrom = pFrom; 
FileOp.pTo = pTo; 
FileOp.wFunc = FO_MOVE; 
return SHFileOperation(&FileOp) == 0;   
}


//
从命名文件或文件夹
bool ReNameFile(char *pTo,char *pFrom)
{
SHFILEOPSTRUCT FileOp={0}; 
FileOp.fFlags = FOF_NOCONFIRMATION;   //
不出现确认对话框 
FileOp.pFrom = pFrom; 
FileOp.pTo = pTo; 
FileOp.wFunc = FO_RENAME; 
return SHFileOperation(&FileOp) == 0;   
}

应用举例:
DeleteFile("d://PID/0/0");    //
删除一个文件夹
DeleteFile("d://PID.dsp/0d://PID.dsw/0/0"); //
删除多个文件
CopyFile("d:/0/0","D://MyProjects//
临时程序/0/0");    //把"临时程序"文件夹放到d盘下面
CopyFile("d:/0/0","D://MyProjects//
临时程序//PID.dsp/0D://MyProjects//临时程序//PID.dsw/0"); //把PID.dsp和PID.dsw俩个文件放到d盘下面
ReNameFile("d://NewName","d://PID/0/0"); //
把PID文件夹从命名为NewName
注意:,如果你想把"D://MyProjects//临时程序/0/0"的文件夹复制到D盘下,并从命名为NewName,应该这样
CopyFile("d://NewName/0/0","D://MyProjects//
临时程序//*.*/0/0"); //把"临时程序"文件夹复制到d盘下并从命名为"NewName"  

下面这个类方便你复制多个文件或文件夹,仅作参考
//
连接多个路径的类
class JOINFILEPATH
{
private:
int pos;
char* MultipleFilePath;
public:
JOINFILEPATH()
{
   pos=0;
   MultipleFilePath=new char[MAX_PATH*10];
   memset(MultipleFilePath,0,MAX_PATH*10);
}
~JOINFILEPATH() { delete []MultipleFilePath; }
void join(char *FilePath)
{
   while(*FilePath!='/0')
    MultipleFilePath[pos++]=*FilePath++;
   pos++;
}
char * GetMultipleFilePath() {return MultipleFilePath;}
};

//应用举例:
JOINFILEPATH FilePath;
FilePath.join("D://MyProjects//
临时程序//PID//PID.dsp");
FilePath.join("D://MyProjects//
临时程序//PID//PID.dsw");
CopyFile("d:/0/0",FilePath.GetMultipleFilePath());

1 pFrom和pTo最好以/0/0结尾(把存放路径的字符串初始化为0),不然有可能会出错,中间的每一个路径用/0隔开
2 pFrom
所指向的文件或文件夹(可以多个)会被复制或移动到pTo所指向的文件夹下面(假如文件夹不存在会询问是否创建,当然你也可以选择直接创建)

参数详解:

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

  在这个结构中,hWnd是指向发送消息的窗口句柄,pFrom与pTo是进行文件操作的源文件名和目标文件名,它包含文件的路径,对应单个文件的路径字符串,或对于多个文件,必须以NULL作为字符串的结尾或文件路径名之间的间隔,否则在程序运行的时候会发生错误。另外,pFrom和pTo都支持通配符*和?,这大大方便了开发人员的使用。例如,源文件或目录有两个,则应是:char pFrom[]="d://Test1/0d://Text.txt/0",它表示对要D:盘Test目录下的所有文件和D:盘上的Text.txt文件进行操作。字符串中的"//"是C语言中的'/'的转义符,'/0'则是NULL。wFunc 是结构中的一个非常重要的成员,它代表着函数将要进行的操作类型,它的取值为如下:

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

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

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

  FO_DELETE: 删除pFrom指定的文件。

  使用该函数进行文件拷贝、移动或删除时,如果需要的时间很长,则程序会自动在进行的过程中出现一个无模式的对话框(Windows操作系统提供的文件操作对话框),用来显示执行的进度和执行的时间,以及正在拷贝、移动或删除的文件名,此时结构中的成员lpszProgressTitle显示此对话框的标题。fFlags是在进行文件操作时的过程和状态控制标识。它主要有如下一些标识,也可以是其组合:

  FOF_FILESONLY:执行通配符,只执行文件;

  FOF_ALLOWUNDO:保存UNDO信息,以便在回收站中恢复文件;

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

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

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

  FOF_SILENT:不显示进度对话框。

  FOF_WANTMAPPINGHANDLE:要求SHFileOperation()函数返回正处于操作状态的实际文件列表,文件列表名柄保存在hNameMappings成员中。

  SHFILEOPSTRUCT结构还包含一个SHNAMEMAPPING结构的数组,此数组保存由SHELL计算的每个处于操作状态的文件的新旧路径。

  在使用该函数删除文件时必须设置SHFILEOPSTRUCT结构中的神秘FOF_ALLOWUNDO标志,这样才能将待删除的文件拷到Recycle Bin,从而使用户可以撤销删除操作。需要注意的是,如果pFrom设置为某个文件名,用FO_DELETE标志删除这个文件并不会将它移到Recycle Bin,甚至设置FOF_ALLOWUNDO标志也不行,在这里你必须使用全路径名,这样SHFileOperation才会将删除的文件移到Recycle Bin。

转自http://blog.youkuaiyun.com/jhb92/archive/2007/04/13/1563452.aspx

Shell的文件操作函数
SHFileOperation
功能:
1.
复制一个或多个文件
2.
删除一个或多个
3.
重命名文件
4.
移动一个或多个文件

有一样的Win32API功能函数是:
CopyFile(),DeleteFile(),MoveFile()
MoveFile
可以对文件重命名!
Win32 API
的层次比SHFileOperation低

SHFileOperation
的重要参数
1.wFunc //
对pFrom pTo要执行的操作
2.fFlags //
影响对wFunx的操作
3.hNameMappings   //
有系统填充,和你也可以填充
4.lpszProgressTitle

pFrom pTo 在结尾是两个'/0/0'
通常用一个'/0',这样会失败的!!
当FOF_MULTIDESTFILES
szPFrom[lstrlen(szPFrom)+1]=0

szPFrom:必须先确定他所指定的文件存在!
可以是单个文件名,*.*,或包含统配符的文件名
注意必须是文件名,不是文件所在的文件夹名
szSource:
可以是一个目录,如果不是目录,但又有
多个文件,那么必须和szPFrom的每一个文件对应,还要指定
FOF_MULTIDETFILES
标志


Source and Target
多个文件---> 一个文件夹
许多单独的文件---->一个文件夹
单独文件--->单独文件
许多单独的文件---->许多单独的文件

单独文件:知道名字的文件
多个文件:带有统配符的文件
注意到source中没有对文件夹的操作!!


!!!!
SHFileOperation
能操作网络上的文件
如果你想将本地文件复制到192.168.1.99
那么只要在192.168.1.99上共享123目录
然后将pTo设置为//192.168.1.99/123
就可以了
但不要设置为//192.168.1.99


对hNameMappings操作是Undocumented!!
如果没有指定hNameMappings
那么hNameMappings一直是NULL
只有当某种操作(copy,move,rename)引起了文件名冲突了,hNameMappings才不是NULL!!!
当第一次copy某些文件到空目录中时hNameMappings一定是NULL
所以hNameMappings只是内存中的一块地区用来让Explorer.exe保存被重命名的文件,以避免文件名冲突!
上面知道了如何才能使hNameMappings有效
现在如何使用hNameMappings,及其所指的结构大小?并取得这个内存块的内容呢?
hNameMappings
是简单LPVOID无法使用loop
要使用hNameMappings,必须定义一个结构体
struct HANDLETOMAPPINGS {
    UINT              uNumberOfMappings; // number of mappings in array
    LPSHNAMEMAPPING   lpSHNameMapping;    // pointer to array of mappings
};
但是可以写一个Enumerate function to enumerate lpSHNameMapping指向的内存块,并且是让Window自己调用我的,不是我主动调用,象Loop

相关联接:
Q154123:File Name Mapping with Windows NT 4.0 Shell 
Q133326:SHFILEOPSTRUCT pFrom and pTo Fields Incorrect
Q142066:PRB: SHGetNameMappingPtr() and SHGetNameMappingCount()
Manipulating Files with the SHFileOperation Function in Visual Basic 4.0

FOF_SILENT //不产生正在复制的对话框
FOF_NOCONFIRMMKDIR//
如果目的目录不存在,就默认创建
FOF_NOCONFIRMATION //
不出现确认文件替换对话框(Confirmation Dialog)(默认替换原来的文i件)
FOF_NOERRORUI//
不出现错误对话框
最好不要同时使用FOF_NOERRORUI,FOF_NOCONFIRMMKDIR
因为FOF_NOCONFIRMMKDIR屏蔽了missing directory Error
但FOF_NOERROR又屏蔽了missing directory Error,那么在同时使用FOF_NOERRORUI,FOF_NOCONFIRMMKDIR
时也阻止了新目录安静(没有用户确认要产生新目录的对话框)的产生!!
那么如何同时使用FOF_NOERRORUI,FOF_NOCONFIRMMKDIR?
就必须先确认pTo所指定的目录存在即可
BOOL MakeSureDiretoryPathExists(LPCSTR DirPath);

使用它要包含imagehlp.h和imagehlp.lib
如何判断同时存在FOF_NOERRORUI,FOF_NOCONFIRMMKDIR


FOF_RENAMEONCOLLISION//
有重复文件时自动重命名


能产生对话框的标志:
FOF_SILENT             //progress dialog            
FOF_RENAMEONCOLLISION //replace dialog
FOF_NOCONFIRMATION     //confirmation dialog
FOF_NOCONFIRMMKDIR     //asks for your permission to create a new folder
FOF_NOERRORUI          //error message


FOF_ALLOWUNDO     //
将文件放入回收站,否则直接删除,一般这个最好做默认

 

 

VC 移动,复制,删除文件(SHFileOperation)总集 VC 移动,复制,删除文件(SHFileOperation) 技术汇总 立即下载

相关推荐

VB6实现的文件压缩

VB6实现的文件压缩,可结合excel操作文件的压缩和解压 , 亲测winrar或360压缩工具都可正常打开

VB利用SHFileOperation实现拷贝、删除、重命名文件

Private Declare Function SHFileOperation Lib “shell32.dll” Alias “SHFileOperationA” (lpFileOp As SHFILEOPSTRUCT) As Long Private Type SHFILEOPSTRUCT hwnd As Long ’ wFunc As Long pFrom As String pTo As String fFlags As Integer fAnyOperationsAborted As Long

键盘上的舞指 1335

一次复制多份本文件程序(VB6.0代码编写)

一次复制多份本文件程序(VB6.0代码编写) 在内容中写入文字,点“复制文件”时,将会在其根目录下找到复制的文件。 QQ223857666勾月

mfc中文本文件和文件夹的复制移动

mfc中文本文件和文件夹的复制移动

m0_46140740的博客 2238

VC删除文件DeleteFile示例

摘要:VC/C++源码,文件操作,删除文件 运行环境:Windows/Visual C/C++

Flutter模块打包AAR集成Android原生项目实践

跨平台开发框架Flutter通过将UI组件渲染为原生代码实现高性能表现,其核心优势在于一套代码可同时运行在iOS和Android平台。在工程实践中,将Flutter模块打包为AAR(Android Archive)进行集成,成为混合开发的主流方案。这种方案既保留了原生项目的稳定性,又能渐进式引入Flutter的高效开发特性。通过配置MethodChannel实现原生与Dart代码通信,开发者可以灵活控制Flutter引擎生命周期,优化内存占用和渲染性能。对于电商、社交等需要快速迭代的业务场景,该方案能显著提

weixin_34025051的博客 399

文件(夹)操作SHFileOperation (删除 复制 移动) 报错 无法读取源文件或磁盘

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

狼族小子的专栏 2463

COMSOL新手必看:锂电池仿真从入门到精通的5个实战案例(附模型文件)

本文为COMSOL新手提供锂电池仿真的5个实战案例,涵盖锂枝晶生长模拟、电池热失控预警、SOC估计等效电路模型、电池组液冷系统热管理及SOH衰退模型构建。通过详细步骤和参数设置,帮助用户快速掌握锂电池仿真技术,提升新能源研发效率。附模型文件可直接应用。

wdx01234567的博客 261

vc使用SHFileOperation()的使用对文件夹的复制,删除,移动,重命名

SHFileOperation()函数主要对文件夹有四种操作:复制,删除,移动,重命名。   挤时间对这个函数进行了利用了一下。写了四个函数。可以很好的对文件夹进行操作。   /////////////////////////////////////   //函数名:DeleteFolder   //输入参数:LpszPath 要删除的路径指针   //作用:删除指定文件夹以及里面的文件...

5192

SAP Workflow 工作流开发步骤总结

SAP WORKFLOW

qq_36952606的博客 5093

当版图同学只给GDS文件时,我是这样用Calibre PEX和Cadence做后仿真的(保姆级避坑)

本文详细介绍了在模拟IC设计中,当仅获得GDS文件时,如何利用Calibre PEX和Cadence进行高效后仿真的完整流程。涵盖从寄生参数提取到Spectre模型创建的实战技巧,特别针对版本兼容性、文件独立性和参数可调性等常见问题提供解决方案,帮助工程师规避协作中的典型陷阱。

weixin_42556197的博客 244

VC 移动,复制,删除文件(SHFileOperation) .

总结一下SHFileOperation的用法,希望对大家有用 //删除文件或者文件夹 bool DeleteFile(char * lpszPath) { SHFILEOPSTRUCT FileOp={0}; FileOp.fFlags = FOF_ALLOWUNDO |   //允许放回回收站       FOF_NOCONFIRMATION; //不出现确认对话框 FileO

http://www.softwareace.cn 王牌软件 551

manimgl安装

安装manimgl

happytree001的博客 708

VC 移动,复制,删除文件(SHFileOperation)时显示动画

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

天道酬勤 2037

手把手教你为智能手表DIY一个离线导航:LVGL + SD卡地图实战

本文详细介绍了如何为智能手表DIY一个离线导航系统,结合LVGL图形库和SD卡地图数据。从硬件选型、地图数据处理到LVGL地图引擎实现,提供了完整的实战指南,特别适合户外运动爱好者和嵌入式开发者。文章还分享了功耗优化、性能提升等实用技巧,帮助读者打造高效的离线导航解决方案。

weixin_42570484的博客 206

小梅哥Xilinx ZYNQ学习笔记2——38译码器

译码器(Decoder)是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等),功能与编码器相反。译码器一般分为通用译码器和数字显示译码器两大类。本设计的是通用译码器。三八译码器,即是 3 种输入状态翻译成 8 种输出状态。1.case开始开始,endcase结束;2.数字声明时,合法的基数格式有 4 中,包括:十进制('d 或 'D),十六进制('h 或 'H),二进制('b 或 'B),八进制('o 或 'O)。数值可指明位宽,也可不指明位宽。

m0_51430584的博客 1636

VC 移动,复制,删除文件(SHFileOperation) 2010-11-16 12:13

总结一下SHFileOperation的用法,希望对大家有用 //删除文件或者文件夹 bool DeleteFile(char * lpszPath) { SHFILEOPSTRUCT FileOp={0}; FileOp.fFlags = FOF_ALLOWUNDO | //允许放回回收站 FOF_NOCONFIRMATION; //不出现确认对话框 FileOp.pFrom

laohu6599的专栏 558

matlab计算图像信噪比SNR

【代码】matlab计算图像信噪比SNR。

baidu_34971492的博客 1397

SHFileOperation的用法

VC 移动,复制,删除文件(SHFileOperation) 总结一下SHFileOperation的用法,希望对大家有用//删除文件或者文件夹bool DeleteFile(char * lpszPath){SHFILEOPSTRUCT FileOp={0};FileOp.fFlags = FOF_ALLOWUNDO |   //允许放回回收站      FOF_NOCONFIRMA

stupidorclever的专栏 6336

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

对文件夹的操作SHFileOperation()的使用

#include SHFileOperation()函数主要对文件夹有四种操作:复制,删除,移动,重命名。   挤时间对这个函数进行了利用了一下。写了四个函数。可以很好的对文件夹进行操作。   /////////////////////////////////////   //函数名:DeleteFolder   //输入参数:LpszPath 要删除的路径指针   //作用:删除指

kingjo002的专栏 820

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

vc 对文件夹的操作 SHFileOperation()的使用

SHFileOperation()函数主要对文件夹有四种操作:复制,删除,移动,重命名。挤时间对这个函数进行了利用了一下。写了四个函数。可以很好的对文件夹进行操作。///////////////////////////////////////函数名:DeleteFolder//输入参数:LpszPath 要删除的路径指针//作用:删除指定文件夹以及里面的文件//////

wanglei2258的专栏 1012

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 三周学习总结
下一篇: DialogBox的定义以及使用
bingxuebage
博客等级 码龄16年 107粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值