Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / desktop / MFC

Copy Files And Directories By Traversing

2.94/5 (10 votes)
6 Jul 2006 1  
Create directories and copy files by traverse function

Introduction

I have searched many sites in Google but was not lucky enough to find a code snippet which is used for copying files using traverse algorithm. I got it after a little effort and I want to share it with friends out there. It is simple and I am including the code snippet below. This is my first submission here.

The Code

This comes under the button click:

C++
void CCopyFilesFrmFoldersDlg::OnButCopy() 
{ 
 CString csSourceDir(_T("")), csDestDir(_T("")); 
 UpdateData(TRUE); 
 GetDlgItemText(IDC_EDIT_SOURCE, csSourceDir);
 GetDlgItemText(IDC_EDIT_DEST, csDestDir); 
 CopyDirAndFiles(csSourceDir, csDestDir);
}

This goes in the function CopyDirAndFiles:

C++
bool CCopyFilesFrmFoldersDlg::CopyDirAndFiles(CString csSource, CString csDest)
{
 bool bReturn  = false; 
 
 try
 {
  CFileFind oFileFind; 
  CString csSourceFilePath(""),csDestFilePath("");
  int nSym(0), nTot(0);
  CString csTemp(""); 
  csSourceFilePath = csSource;
  csSourceFilePath += "\\*.*";
  
 /////////start looping////////
  BOOL bWorking = oFileFind.FindFile(csSourceFilePath);
  
  while (bWorking)
  {   
   ////////////Search for next file///
   bWorking = oFileFind.FindNextFile(); 
   ///////////File Path Name//////////
   csSourceFilePath = oFileFind.GetFilePath(); 
   if(oFileFind.IsDirectory())
   {      
    if(oFileFind.GetFileName().CompareNoCase(".")==0||
		oFileFind.GetFileName().CompareNoCase("..")==0)
    continue;   
    csDestFilePath = csDest;
    nSym = csSourceFilePath.ReverseFind('\\');
    nTot = csSourceFilePath.GetLength();    
    csTemp = csSourceFilePath.Right(nTot - nSym);    
    csDestFilePath += csTemp; 
    CreateDirectory(csDestFilePath, NULL); 
    CopyDirAndFiles(csSourceFilePath, csDestFilePath);
   }
   else
   {    
    csDestFilePath = csDest;
    nSym = csSourceFilePath.ReverseFind('\\');    
    nTot = csSourceFilePath.GetLength();    
    csTemp = csSourceFilePath.Right(nTot - nSym);    
    csDestFilePath += csTemp;
    
    CopyFile(csSourceFilePath, csDestFilePath, FALSE);
   }
  }
  
  oFileFind.Close();  
  bReturn = true;
 } 
 
 catch(...)
 { 
  bReturn = false;
 } 
 
 return bReturn;
}

Hope it helps...

History

  • 6th July, 2006: Initial post

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here