当前位置:天才代写 > tutorial > C语言/C++ 教程 > Windows95/NT中实现文件拷贝的编程要领

Windows95/NT中实现文件拷贝的编程要领

2017-11-06 08:00 星期一 所属: C语言/C++ 教程 浏览:786

副标题#e#

在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作为隔断,而且可以支持通配符*和?。如源文件或目次有两个,则应是:


#p#副标题#e#

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将包括一个

#p#副标题#e#

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");
}

三、 竣事语

#p#分页标题#e#

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

在各类开拓软件中,都提供了对付文件的各类操纵方法,可是它必需操作到文件系统较为深入的常识,并且对付其操纵的直观性方面也需要开拓者进一步地设计,因此操作操纵系统SHELL举办措施设计,不失是一种好的设计要领。

 

    关键字:

天才代写-代写联系方式