如何拷贝一文件(如文本文件)到别的目录?用哪个函数呢?先谢了
解决方案 »
- VC对注册表操作的一点小问题
- 用GDI+怎么显示JPEG啊?
- 问一个问题:当移动一个窗口,使被遮盖的窗口显示出来,被遮盖的窗口这是除了WM_PAINT,还响应什么消息??
- CMDIFrameWnd 如何拆分窗体?
- 本人初学VC,过来人指点一下,几本书,从何学起
- 散分讨论:VC开发数据库程序你一般用什么?ODBC还是OLE DB 还是ADO?
- 两个问题,不难!一个不记得了,一个不会!
- 请问下面的错误是什么原因导致的呀?诚恳指教,万分感谢!!
- 我想在CString后面加上“回车,换行”,即Chr(13)+Chr(10),其中后一个为'\n',请问应该怎么表示?
- 一个简单语法问题
- 关于按钮!!! 请帮忙看看.
- 诚心求教InstallShield(v6.22) 制作多光盘安装程序问题,知情者进来看看吧!在线等待中。。。
char buf1[256];
SHFILEOPSTRUCT fo; memset(buf, 0, sizeof(buf));
memset(buf1, 0, sizeof(buf1));
memset(&fo, 0, sizeof(fo));
strcpy(buf, "f:\\source");
strcpy(buf1, "f:\\target");
fo.wFunc = FO_MOVE;//复制则是FO_COPY
fo.pFrom = buf;
fo.pTo = buf1;
fo.Flags = FOF_SIMPLEPROGRESS;
SHFileOperation(&fo);
LPCTSTR lpExistingFileName, // name of an existing file
LPCTSTR lpNewFileName, // name of new file
BOOL bFailIfExists // operation if file exists
);
问:如何移动一个目录及其子目录?
问:如何删除一个目录及其子目录到回收站或者彻底删除?
问:如何更改文件和目录的名称
答:使用SHFileOperation API就可以进行文件和目录操作。这个API只有一个类型是SHFILEOPSTRUCT的参数,用于输入和输出信息.使用时容易出现的问题是忘记在SHFILEOPSTRUCT的pFrom和pTo指定的文件列表字符串末尾加上一个额外的0终止符,或者在pTo中指定了通配符或者相对路径。如果存在文件名冲突,新的文件名可能不是你指定的名字,而是以“复件 ”+原文件名这样的形式。这时候可能需要从结构的输出参数中获得更名后的文件名。下面的代码演示了在Win9x和ANSI程序中如何做到这一点。
CString OldPath;
CString NewPath;
SHFILEOPSTRUCT shFileOp;//after filling other members:
shFileOp.fFlags = FOF_WANTMAPPINGHANDLE
| FOF_RENAMEONCOLLISION;shFileOp.lpszProgressTitle = "Test";
shFileOp.fAnyOperationsAborted = FALSE;SHFileOperation(&shFileOp);if(!shFileOp.hNameMappings)
return; //there is nothing further to do, no file collisionstruct TMPMAP
{
int Indx;
SHNAMEMAPPING *pMapping;
};//this will give you a pointer to the beginning of the
//array of SHNAMEMAPPING structures
TMPMAP *pTmpMap = (TMPMAP*)shFileOp.hNameMappings;for(int in = 0; in < pTmpMap->Indx; in++)
{
SHNAMEMAPPING *pMap = &pTmpMap->pMapping[in]; //do the same thing for csOldPath
/*********************************************************/
char *buf = csNewPath.GetBufferSetLength(pMap->cchNewPath);strcpy(buf, (char*)pMap->pszOldPath); //see the result of
this,for(int dw = 0 ; dw < 2 * pMap->cchNewPath - 1 ; dw+=2)
{
*buf = (pMap->pszNewPath[dw]);
buf++;
}
buf = 0;
csNewPath.ReleaseBuffer(); //and see the result of this.
/**********************************************************/
}//always free it if requested
SHFreeNameMappings(shFileOp.hNameMappings);
无论编译时你的程序指定的是UNICODE还是ANSI ,WINNT4.0版本以上的操作系统中返回的总是Unicode版本的SHNAMEMAPPING结构,。如果你需要你的代码在所有Windows版本中都适用,那么需要判断操作系统的版本,处理获得的SHNAMEMAPPINGA或者SHNAMEMAPPINGW。x = SHFileOperation(&shFileOp);
...
if (fWin9x) {
HandleAnsiNameMappings(shFileOp.hNameMappings);
}
else {
HandleUnicodeNameMappings(shFileOp.hNameMappings);
}
MoveFileEx(sSourPath, sDestPath, MOVEFILE_COPY_ALLOWED);