Solved

How to copy entire folder structure from C++?

Posted on 1999-01-19
7
862 Views
Last Modified: 2013-12-03
Is there a Windows API function that will copy an entire folder structure?  I am particularly interested in a solution that doesn't abort if one of the files can't be copied because of a sharing vilation.

Only an answer that will give me the above solution will be accepted.  If there's no way to do this via a Windows API call, then a code snippet will be accepted, otherwise the answer will be rejected.
0
Comment
Question by:shrif
7 Comments
 
LVL 3

Expert Comment

by:luisr
ID: 1419019

There is no Windows API. What you can do is for a folder repetedly call FindFirstFile/FindNextFile and copy the files (with CopyFile), and when a directory is found, call the same function recursively.

I cannot give you a code snippet right now because I don't remember the parameters to all those APIs, but if you are interested, I can look them up in help and write those functions for you. I work in C/C++, so if you work in another language, I could write a simple DLL for you.

Anyway, send me an e-mail to luisr@iname.com if you are interested.

0
 
LVL 2

Expert Comment

by:rayb
ID: 1419020
How about using the DOS command xcopy with the /s option?
You can fire it off from your c++ code using the CreateProcess API.
0
 
LVL 86

Expert Comment

by:jkr
ID: 1419021
Hmm - this can be done much easier, 'SHFileOperation()' should do the job...
0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 
LVL 1

Author Comment

by:shrif
ID: 1419022
thanks.
0
 

Expert Comment

by:ramrocket
ID: 1419023
I'm not aware of a single API that will solve your problem but here is a
propose solution

int CopyFiles(char *szFromDir, char *szToDir)
{
      long hFile;
      struct _finddata_t fd;
      char szBuffer[256];

      sprintf(szBuffer,"%s\\*.*", szFromDir);
      if( (hFile = _findfirst(szBuffer, &fd)) == -1L ) return(-1);

      do
          {
            char szFrom[256],szTo[256];
            if(*fd.name !='.')
            {
                  sprintf(szFrom,"%s\\%s",szFromDir,fd.name);
                  sprintf(szTo,"%s\\%s",szToDir,fd.name);

                  //check for subdirectories
                  sprintf(szFileName,"%s\\%s",szDir,fd.name);

                  //check for volume space remaining
                  CFileStatus status;
                  CFile::GetStatus(szFileName, status );
                  if(status.m_attribute==      0x10) //directory
                        CopyFiles(szFrom,szTo);
            }         

    }while(_findnext(hFile, &fd) == 0);
    _findclose( hFile );

return(0);
}

0
 
LVL 1

Author Comment

by:shrif
ID: 1419024
jkr, repost as an 'answer'

0
 
LVL 86

Accepted Solution

by:
jkr earned 100 total points
ID: 1419025
Thanx shrif ;-)
0

Featured Post

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Method 'OpenReport' of the object Docmd failed 7 30
Vb.Net Loading Word 11 103
Licensing Sharepoint 2016 for developers 11 47
VIDEO DATASOURCE Control Resize issue 2 19
This article describes how to programmatically preset the "Pages per Sheet" option that's available with most printer drivers.   This setting lets you do "n-Up" printing, where two, four, or more pages are printed on each sheet of paper. If your …
This article describes a technique for converting RTF (Rich Text Format) data to HTML and provides C++ source that does it all in just a few lines of code. Although RTF is coming to be considered a "legacy" format, it is still in common use... po…
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question