OF_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的支持。
---- 在各种