VC移动复制删除文件.docx

上传人:b****6 文档编号:4611117 上传时间:2022-12-07 格式:DOCX 页数:11 大小:21.93KB
下载 相关 举报
VC移动复制删除文件.docx_第1页
第1页 / 共11页
VC移动复制删除文件.docx_第2页
第2页 / 共11页
VC移动复制删除文件.docx_第3页
第3页 / 共11页
VC移动复制删除文件.docx_第4页
第4页 / 共11页
VC移动复制删除文件.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

VC移动复制删除文件.docx

《VC移动复制删除文件.docx》由会员分享,可在线阅读,更多相关《VC移动复制删除文件.docx(11页珍藏版)》请在冰豆网上搜索。

VC移动复制删除文件.docx

VC移动复制删除文件

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

(2009-10-0514:

14:

34)

转载

标签:

it

分类:

技术网摘

(转载于:

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

//删除文件或者文件夹

boolDeleteFile(char*lpszPath)

{

SHFILEOPSTRUCTFileOp={0};

FileOp.fFlags=FOF_ALLOWUNDO|  //允许放回回收站

     FOF_NOCONFIRMATION;//不出现确认对话框

FileOp.pFrom=lpszPath;

FileOp.pTo=NULL;     //一定要是NULL

FileOp.wFunc=FO_DELETE;   //删除操作

returnSHFileOperation(&FileOp)==0;

}

//复制文件或文件夹

boolCopyFile(char*pTo,char*pFrom)

{

SHFILEOPSTRUCTFileOp={0};

FileOp.fFlags=FOF_NOCONFIRMATION|  //不出现确认对话框

     FOF_NOCONFIRMMKDIR;//需要时直接创建一个文件夹,不需用户确定

FileOp.pFrom=pFrom;

FileOp.pTo=pTo;

FileOp.wFunc=FO_COPY;

returnSHFileOperation(&FileOp)==0;

}

//移动文件或文件夹

boolMoveFile(char*pTo,char*pFrom)

{

SHFILEOPSTRUCTFileOp={0};

FileOp.fFlags=FOF_NOCONFIRMATION|  //不出现确认对话框

     FOF_NOCONFIRMMKDIR;//需要时直接创建一个文件夹,不需用户确定

FileOp.pFrom=pFrom;

FileOp.pTo=pTo;

FileOp.wFunc=FO_MOVE;

returnSHFileOperation(&FileOp)==0;  

}

//从命名文件或文件夹

boolReNameFile(char*pTo,char*pFrom)

{

SHFILEOPSTRUCTFileOp={0};

FileOp.fFlags=FOF_NOCONFIRMATION;  //不出现确认对话框

FileOp.pFrom=pFrom;

FileOp.pTo=pTo;

FileOp.wFunc=FO_RENAME;

returnSHFileOperation(&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"  

 

下面这个类方便你复制多个文件或文件夹,仅作参考

//连接多个路径的类

classJOINFILEPATH

{

private:

intpos;

char*MultipleFilePath;

public:

JOINFILEPATH()

{

  pos=0;

  MultipleFilePath=newchar[MAX_PATH*10];

  memset(MultipleFilePath,0,MAX_PATH*10);

}

~JOINFILEPATH(){delete[]MultipleFilePath;}

voidjoin(char*FilePath)

{

  while(*FilePath!

='\0')

   MultipleFilePath[pos++]=*FilePath++;

  pos++;

}

char*GetMultipleFilePath(){returnMultipleFilePath;}

};

//应用举例:

JOINFILEPATHFilePath;

FilePath.join("D:

\\MyProjects\\临时程序\\PID\\PID.dsp");

FilePath.join("D:

\\MyProjects\\临时程序\\PID\\PID.dsw");

CopyFile("d:

\0\0",FilePath.GetMultipleFilePath());

1pFrom和pTo最好以\0\0结尾(把存放路径的字符串初始化为0),不然有可能会出错,中间的每一个路径用\0隔开

2pFrom所指向的文件或文件夹(可以多个)会被复制或移动到pTo所指向的文件夹下面(假如文件夹不存在会询问是否创建,当然你也可以选择直接创建)

参数详解:

Typedefstruct_ShFILEOPSTRUCT

{

HWNDhWnd;//消息发送的窗口句柄;

UINTwFunc;//操作类型

LPCSTRpFrom;//源文件及路径

LPCSTRpTo;//目标文件及路径

FILEOP_FLAGSfFlags;//操作与确认标志

BOOLfAnyOperationsAborted;//操作选择位

LPVOIDhNameMappings;//文件映射

LPCSTRlpszProgressTitle;//文件操作进度窗口标题

}SHFILEOPSTRUCT,FAR*LPSHFILEOPSTRUCT;

  在这个结构中,hWnd是指向发送消息的窗口句柄,pFrom与pTo是进行文件操作的源文件名和目标文件名,它包含文件的路径,对应单个文件的路径字符串,或对于多个文件,必须以NULL作为字符串的结尾或文件路径名之间的间隔,否则在程序运行的时候会发生错误。

另外,pFrom和pTo都支持通配符*和?

,这大大方便了开发人员的使用。

例如,源文件或目录有两个,则应是:

charpFrom[]="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标志,这样才能将待删除的文件拷到RecycleBin,从而使用户可以撤销删除操作。

需要注意的是,如果pFrom设置为某个文件名,用FO_DELETE标志删除这个文件并不会将它移到RecycleBin,甚至设置FOF_ALLOWUNDO标志也不行,在这里你必须使用全路径名,这样SHFileOperation才会将删除的文件移到RecycleBin。

转自

Shell的文件操作函数

SHFileOperation

功能:

1.复制一个或多个文件

2.删除一个或多个

3.重命名文件

4.移动一个或多个文件

有一样的Win32API功能函数是:

CopyFile(),DeleteFile(),MoveFile()

MoveFile可以对文件重命名!

Win32API的层次比SHFileOperation低

SHFileOperation

的重要参数

1.wFunc//对pFrompTo要执行的操作

2.fFlags//影响对wFunx的操作

3.hNameMappings  //有系统填充,和你也可以填充

4.lpszProgressTitle

pFrompTo在结尾是两个'\0\0'

通常用一个'\0',这样会失败的!

!

当FOF_MULTIDESTFILES

szPFrom[lstrlen(szPFrom)+1]=0

szPFrom:

必须先确定他所指定的文件存在!

可以是单个文件名,*.*,或包含统配符的文件名

注意必须是文件名,不是文件所在的文件夹名

szSource:

可以是一个目录,如果不是目录,但又有

多个文件,那么必须和szPFrom的每一个文件对应,还要指定

FOF_MULTIDETFILES标志

SourceandTarget

多个文件--->一个文件夹

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

单独文件--->单独文件

许多单独的文件---->许多单独的文件

单独文件:

知道名字的文件

多个文件:

带有统配符的文件

注意到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,必须定义一个结构体

structHANDLETOMAPPINGS{

   UINT             uNumberOfMappings;//numberofmappingsinarray

   LPSHNAMEMAPPING  lpSHNameMapping;   //pointertoarrayofmappings

};

但是可以写一个EnumeratefunctiontoenumeratelpSHNameMapping指向的内存块,并且是让Window自己调用我的,不是我主动调用,象Loop

相关联接:

Q154123:

FileNameMappingwithWindowsNT4.0Shell

Q133326:

SHFILEOPSTRUCTpFromandpToFieldsIncorrect

Q142066:

PRB:

SHGetNameMappingPtr()andSHGetNameMappingCount()

ManipulatingFileswiththeSHFileOperationFunctioninVisualBasic4.0

 

FOF_SILENT//不产生正在复制的对话框

FOF_NOCONFIRMMKDIR//如果目的目录不存在,就默认创建

FOF_NOCONFIRMATION//不出现确认文件替换对话框(ConfirmationDialog)(默认替换原来的文i件)

FOF_NOERRORUI//不出现错误对话框

最好不要同时使用FOF_NOERRORUI,FOF_NOCONFIRMMKDIR

因为FOF_NOCONFIRMMKDIR屏蔽了missingdirectoryError

但FOF_NOERROR又屏蔽了missingdirectoryError,那么在同时使用FOF_NOERRORUI,FOF_NOCONFIRMMKDIR

时也阻止了新目录安静(没有用户确认要产生新目录的对话框)的产生!

!

那么如何同时使用FOF_NOERRORUI,FOF_NOCONFIRMMKDIR?

就必须先确认pTo所指定的目录存在即可

BOOLMakeSureDiretoryPathExists(LPCSTRDirPath);

使用它要包含imagehlp.h和imagehlp.lib

如何判断同时存在FOF_NOERRORUI,FOF_NOCONFIRMMKDIR

=====

因此本人注释:

如果出现弹出"无法删除文件无法:

读取源文件或磁盘文.",

可:

FOF_NOCONFIRMATION|FOF_NOCONFIRMMKDIR|FOF_NOERRORUI

=====

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

能产生对话框的标志:

FOF_SILENT            //progressdialog           

FOF_RENAMEONCOLLISION//replacedialog

FOF_NOCONFIRMATION    //confirmationdialog

FOF_NOCONFIRMMKDIR    //asksforyourpermissiontocreateanewfolder

FOF_NOERRORUI         //errormessage

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

 ///////////////////////////////////////////////////

XX收索到:

 

1

SHFILEOPSTRUCT详解

  与所有仅使用数据结构作为输入参数的函数一样,SHFileOperation()函数是一个相当灵活的例程。

通过以适当的方式组合各种标志,和使用(或不使用)各个SHFILEOPSTRUCT结构的成员,它可以执行许多操作。

下面就让我们来看一看这个结构中每一个成员所起的的作用:

Hwnd

 由这个函数生成的所有对话框的父窗口Handle。

 

wFunc

 表示要执行的操作

 

pFrom

 含有源文件名的缓冲

 

pTo

 含有目标文件名的缓冲(不考虑删除的情况)

 

fFlags

 能够影响操作的标志

 

fAnyOperationsAborted

 包含TRUE或FALSE的返回值。

它依赖于是否在操作完成之前用户取消了操作。

通过检测这个成员,你就可以确定操作是正常完成了还是被手动中断了。

 

hNameMappings

 资料描述它为包含SHNAMEMAPPING结构数组的文件名映射对象的Handle。

 

lpszProgressTitle

 一个在一定情况下用于显示对话框标题的字符串。

 

 抑制的对话框

 相关性与优先级

 

FOF_MULTIDESTFILES

 None

 None

 

FOF_FILESONLY

 None

 None

 

FOF_SILENT 

 如果设置,进度对话框不显示。

 优先于FOF_SIMPLEPROGRESS标志。

 

FOF_SIMPLEPROGRESS

 None

 为FOF_SILENT标志所抑制。

 

FOF_RENAMEONCOLLISION

 如果设置了这个标志,当被移动或拷贝的文件与已存在文件同名时置换对话框不会出现。

 名字冲突时,如果FOF_NOCONFIRMATION标志设置,则操作继续。

如果二者都设置了,则它优先于FOF_NOCONFIRMATION。

即,文件以给定的新名字复制,而不是覆盖。

 

FOF_NOCONFIRMATION

 如果设置,确认对话框在任何情况下都不出现。

 名字冲突时,引起文件覆盖,除非设置了FOF_RENAMEONCOLLISION标志。

 

FOF_NOCONFIRMMKDIR 

 抑制请求建立新文件夹的对话框

 缺省目录作为严重错误产生一个错误消息框。

建立目录的确认对话框作为错误消息框是否显示依赖于FOF_NOERRORUI的设置。

 

FOF_NOERRORUI 

 抑制所有错误消息框。

 优先于前一个标志。

如果设置,则,缺省目录引起不被处理的异常,并且返回错误码。

 

FOF_SILENT

 

0x0004

 这个操作不回馈给用户,就是说,不显示进度对话框。

相关的消息框仍然显示。

 

FOF_NOCONFIRMATION

 

0x0010

 这个标志使函数对任何遇到的消息框都自动回答Yes。

 

FOF_ALLOWUNDO

 0x0040

 如果设置,这个标志强迫函数移动被删除的文件到‘回收站’中。

否则,文件将被物理地从磁盘上删除。

 

FOF_FILESONLY

 

0x0080

 设置这个标志导致函数仅仅删除文件,跳过目录项。

它仅仅应用于指定通配符的情况。

 

FOF_SIMPLEPROGRESS

 

0x0100

 这导致简化用户界面。

使之只有动画而不报告被删除的文件名。

代之的是显示lpszProgressTitle成员中指定的文字。

 

FOF_NOERRORUI

 

0x0400 

 如果设置了这个标志,任何发生的错误都不能使消息框显示,而是程序中返回错误码。

 

 

FOF_SIMPLEPROGRESS或FOF_SILENT隐藏正在被删除的文件名,

通过设置FOF_FILESONLY,仅仅删除文件。

//

FOF_ALLOWUNDO,它允许程序员决定文件是否一次就全部删除,或存储到‘回收站

’中等候可能的恢复。

如果FOF_ALLOWUNDO被设置,文件则被移动到回收站,并且

这个操作可以被Undo(尽管可以手动Undo)。

在OnInitDialog()中:

法一:

   CEdit*pEdt=(CEdit*)GetDlgItem(IDC_EDIT_TXDATA);//   

 pEdt->SetLimitText(4);                            //限制编辑框的数据长度为4

 

法二:

m_strTXData.SetLimitText(4);       //注意此方法好像不好用,,,,,推荐使用法一

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1