目录拷贝 如何编程实现从一个目录到另一个目录的拷贝(包括子目录及所有文件)?谁有例子100分 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 无法直接进行目录拷贝,我给你一个递归的文件拷贝函数,自己研究一下吧!如下:void FolderFileCopy(CString strSource,CString strDestin){ CString strNewPath(strSource); CString strNew; CString strDestFile; CString strTemp; CString strSection; CString strKey; CString strName; HANDLE hFile; WIN32_FIND_DATA wfd; if(strNewPath == "") return; strNewPath += "\\*.*"; hFile = ::FindFirstFile(strNewPath,&wfd); if( hFile == INVALID_HANDLE_VALUE ) return; do { if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { strName.Format("%s",wfd.cFileName); if(lstrcmp(wfd.cFileName,".") == 0 || lstrcmp(wfd.cFileName,"..") == 0) continue; strNew = strNewPath; strNew = strNew.Left(strNew.GetLength()-3); strNew += strName; strTemp = strDestin + "\\" + strName; ::CreateDirectory(strTemp,NULL); FolderFileCopy(strNew,strTemp); } else if(((wfd.dwFileAttributes & (FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM)) == 0)) { strName.Format("%s",wfd.cFileName); strNew = strNewPath; strNew = strNew.Left(strNew.GetLength()-3); strTemp = strNew + strName; strDestFile = strDestin + "\\" + strName; ::CopyFile(strTemp,strDestFile,TRUE); } }while(::FindNextFile(hFile,&wfd)); FindClose(hFile);} thank guoxing(狼):我完善了一下,如下:void CFileServerView::FolderFileCopy(CString strSource,CString strDestin){ CString strNewPath(strSource); CString strNew; CString strDestFile; CString strTemp; CString strSection; CString strKey; CString strName; HANDLE hFile; WIN32_FIND_DATA wfd; if(strNewPath == "") { m_Log.WriteLogContent("源文件名为空,无法进行拷贝!"); return; } strNewPath += "\\*.*"; hFile = ::FindFirstFile(strNewPath,&wfd); if( hFile == INVALID_HANDLE_VALUE ) { CString logstr; logstr.Format("源文件名(%s)句柄错误,无法进行拷贝!请检查注册表或共享!",strNewPath); m_Log.WriteLogContent(logstr); return; } CreateDirectory(strDestin,NULL); do { if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { strName.Format("%s",wfd.cFileName); if(lstrcmp(wfd.cFileName,".") == 0 || lstrcmp(wfd.cFileName,"..") == 0) continue; strNew = strNewPath; strNew = strNew.Left(strNew.GetLength()-3); strNew += strName; strTemp = strDestin + "\\" + strName; ::CreateDirectory(strTemp,NULL); FolderFileCopy(strNew,strTemp); continue; } strName.Format("%s",wfd.cFileName); strNew = strNewPath; strNew = strNew.Left(strNew.GetLength()-3); strTemp = strNew + strName; strDestFile = strDestin + "\\" + strName; CFileStatus rStatus; if (CFile::GetStatus(strDestFile,rStatus) != 0 ) {//if file exist,set read_only to read!otherwise access error! rStatus.m_attribute= 0x00; CFile::SetStatus(strDestFile,rStatus); } BOOL bSuccess = ::CopyFile(strTemp,strDestFile,FALSE); CString logstr; if(bSuccess) { logstr.Format("从源(%s)到目的(%s)拷贝文件成功!",strTemp,strDestFile); m_Log.WriteLogContent(logstr); } else { DWORD ret = GetLastError(); logstr.Format("从源(%s)到目的(%s)拷贝文件失败!errorcode=%d.",strTemp,strDestFile,ret); m_Log.WriteLogContent(logstr); continue; } }while(::FindNextFile(hFile,&wfd)); FindClose(hFile); Sleep(1);}好,到此结帖! 求文件传输实例 很简单常识,一些函数前的两个冒号::是什么意思,有什么用? 跳槽了,散分 VC开发数据库应用真的很慢吗? 有没有人学过vtk? 如何创建一个类似WINRAR的文件浏览器 求教 !我怎么设置不出“华文行楷”“楷体_GB2312”等字体? 2个exe文件,互相有消息通讯,现在要把A做成ocx放在网页上,可以不动B(把B放在win系统目录)吗? BMP缩小一问 用FTP查找有空格的文件名 大虾,救命! 怎么用vc判断出某access文件已经损坏?
void FolderFileCopy(CString strSource,CString strDestin)
{
CString strNewPath(strSource);
CString strNew;
CString strDestFile;
CString strTemp;
CString strSection;
CString strKey;
CString strName;
HANDLE hFile;
WIN32_FIND_DATA wfd; if(strNewPath == "")
return; strNewPath += "\\*.*";
hFile = ::FindFirstFile(strNewPath,&wfd);
if( hFile == INVALID_HANDLE_VALUE )
return; do
{
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
strName.Format("%s",wfd.cFileName);
if(lstrcmp(wfd.cFileName,".") == 0 || lstrcmp(wfd.cFileName,"..") == 0)
continue;
strNew = strNewPath;
strNew = strNew.Left(strNew.GetLength()-3);
strNew += strName;
strTemp = strDestin + "\\" + strName;
::CreateDirectory(strTemp,NULL);
FolderFileCopy(strNew,strTemp);
}
else if(((wfd.dwFileAttributes & (FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM)) == 0))
{
strName.Format("%s",wfd.cFileName);
strNew = strNewPath;
strNew = strNew.Left(strNew.GetLength()-3);
strTemp = strNew + strName;
strDestFile = strDestin + "\\" + strName;
::CopyFile(strTemp,strDestFile,TRUE);
}
}while(::FindNextFile(hFile,&wfd));
FindClose(hFile);
}
我完善了一下,如下:
void CFileServerView::FolderFileCopy(CString strSource,CString strDestin)
{
CString strNewPath(strSource);
CString strNew;
CString strDestFile;
CString strTemp;
CString strSection;
CString strKey;
CString strName;
HANDLE hFile;
WIN32_FIND_DATA wfd; if(strNewPath == "")
{
m_Log.WriteLogContent("源文件名为空,无法进行拷贝!");
return;
} strNewPath += "\\*.*";
hFile = ::FindFirstFile(strNewPath,&wfd);
if( hFile == INVALID_HANDLE_VALUE )
{
CString logstr;
logstr.Format("源文件名(%s)句柄错误,无法进行拷贝!请检查注册表或共享!",strNewPath);
m_Log.WriteLogContent(logstr);
return;
} CreateDirectory(strDestin,NULL); do
{
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
strName.Format("%s",wfd.cFileName);
if(lstrcmp(wfd.cFileName,".") == 0 || lstrcmp(wfd.cFileName,"..") == 0)
continue;
strNew = strNewPath;
strNew = strNew.Left(strNew.GetLength()-3);
strNew += strName;
strTemp = strDestin + "\\" + strName;
::CreateDirectory(strTemp,NULL);
FolderFileCopy(strNew,strTemp);
continue;
} strName.Format("%s",wfd.cFileName);
strNew = strNewPath;
strNew = strNew.Left(strNew.GetLength()-3);
strTemp = strNew + strName;
strDestFile = strDestin + "\\" + strName; CFileStatus rStatus;
if (CFile::GetStatus(strDestFile,rStatus) != 0 )
{//if file exist,set read_only to read!otherwise access error!
rStatus.m_attribute= 0x00;
CFile::SetStatus(strDestFile,rStatus);
} BOOL bSuccess = ::CopyFile(strTemp,strDestFile,FALSE);
CString logstr;
if(bSuccess)
{
logstr.Format("从源(%s)到目的(%s)拷贝文件成功!",strTemp,strDestFile);
m_Log.WriteLogContent(logstr);
}
else
{
DWORD ret = GetLastError();
logstr.Format("从源(%s)到目的(%s)拷贝文件失败!errorcode=%d.",strTemp,strDestFile,ret);
m_Log.WriteLogContent(logstr);
continue;
}
}while(::FindNextFile(hFile,&wfd)); FindClose(hFile);
Sleep(1);
}好,到此结帖!