Click here to Skip to main content
12,634,330 members (29,016 online)
Click here to Skip to main content
Add your own
alternative version

Stats

237.6K views
11K downloads
58 bookmarked
Posted

Copy, Move and Delete files and directories without using SHFileOperation

, 30 Mar 2004
Rate this:
Please Sign up or sign in to vote.
Class that allows file operations without using SHFileOperation

Introduction

There are no methods in VS for copying files and directories (with subdirectories and files) based on API functions. It's necessary to use SHFileOperation function from shell to do it. Sometimes it's inconvenient and this code is designed to fill this space.

Background

This code is a simple wrapper over API functions that allow file and dir operations. Recursion methods are the base of this code. MFC was used for simplification of process (only CString and CFileFind classes used from). If you don't want to use MFC in your project you can change MFC calls to API calls (use STL string and API functions FindFirstFile andFindNextFile instead of CFileFind class).

Features

  1. OverwriteMode is set: If you copy file to the existing file or to the folder where exist file with the same name, it will overwrite it.
  2. OverwriteMode is not set: If you copy file to the existing file or to the folder where exist file with the same name, it will create new file with name 'Copy of ORIGINAL_FILE_NAME'. If file 'Copy of ORIGINAL_FILE_NAME' already exists too, it will create new file with name 'Copy (2) of ORIGINAL_FILE_NAME' and so on.
  3. AskIfReadonly is set: If you try to delete file with readonly attribute the warning message will be shown. During 'replace' operation this flag is ignored.
  4. AskIfReadonly is not set: If you try to delete file with readonly attribute it will delete without any question.
  5. Path presentation: It is unimportant how you represent the path with '\' on end or without it. For example you can set 'c:\\1' or 'c:\\1\\' it's the same. You can copy file to file, file to folder or folder to folder. Just set the source path and destination path.

Using the code

  1. Add files FileOperations.cpp and FileOpearations.h to your project.
  2. In the file where you want to use this class add #include "FileOpearations.h"
  3. Create CFileOperation object and use it.

Sample code

#include "stdafx.h"
#include "FileOperations.h"
//
// this code copy 'c:\source' directory and 
// all it's subdirectories and files
// to the 'c:\dest' directory. 
//
CFileOperation fo;      // create object
fo.SetOverwriteMode(false); // reset OverwriteMode flag (optional)
if (!fo.Copy("c:\\source", "c:\\dest")) // do Copy
{
    fo.ShowError(); // if copy fails show error message
}
//
// this code delete 'c:\source' directory and 
// all it's subdirectories and files.
//
fo.SetAskIfReadOnly();   // set AskIfReadonly flag (optional)
if (!fo.Delete("c:\\source")) // do Copy
{
    fo.ShowError(); // if copy fails show error message
}

If some operation failed you can get error code or error string or show error message (see functions, GetErrorCode(), GetErrorString() and ShowError() accordingly).

For more information you can see demo project.

Available methods

  • bool Delete(CString sPathName); // delete file or folder
  • bool Copy(CString sSource, CString sDest); // copy file or folder
  • bool Replace(CString sSource, CString sDest); // move file or folder
  • bool Rename(CString sSource, CString sDest); // rename file or folder
  • CString GetErrorString(); // return error description
  • DWORD GetErrorCode(); // return error code
  • void ShowError(); // show error message
  • void SetAskIfReadOnly(bool bAsk = true); // sets behavior for readonly files(folders)
  • bool IsAskIfReadOnly(); // return current behavior for readonly files(folders)
  • void SetOverwriteMode(bool bOverwrite = false); // sets overwrite mode on/off
  • bool IsOverwriteMode(); // return current overwrite mode
  • bool IsAborted(); // return true if operation was aborted

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

Share

About the Author

Fess
Web Developer
Russian Federation Russian Federation
No Biography provided

You may also be interested in...

Pro
Pro

Comments and Discussions

 
QuestionLicense Details Pin
Member 1095292828-Apr-15 2:02
memberMember 1095292828-Apr-15 2:02 
QuestionI found a bug,when doing move file F:\xfolder to F:\, failed. Pin
mszengg19-Jan-13 0:01
membermszengg19-Jan-13 0:01 
I found a bug,when doing move file F:\xfolder to F:\, failed.
SuggestionCould use some polishing Pin
Mattias G17-Aug-12 1:54
memberMattias G17-Aug-12 1:54 
GeneralMy vote of 5 Pin
Igor SPb13-Aug-12 0:12
memberIgor SPb13-Aug-12 0:12 
GeneralMy vote of 5 Pin
Sivaprasad Tamatam5-Jun-12 22:01
memberSivaprasad Tamatam5-Jun-12 22:01 
QuestionCatching Exception in Copy() Pin
Anandi.VC5-Mar-12 23:27
memberAnandi.VC5-Mar-12 23:27 
QuestionCan't copy subFolder? Pin
Robillhood13-Feb-11 16:51
memberRobillhood13-Feb-11 16:51 
Generalsaved my drive! thank you Pin
bahram28-Aug-08 9:57
memberbahram28-Aug-08 9:57 
GeneralRe: saved my drive! thank you Pin
joyjjjz18-Sep-08 21:16
memberjoyjjjz18-Sep-08 21:16 
GeneralWarning !! Pin
sebmahe9-Mar-07 7:05
membersebmahe9-Mar-07 7:05 
Questionwithout MFC ? Pin
spacedoudou25-Jan-07 13:02
memberspacedoudou25-Jan-07 13:02 
QuestionCan you copy to a remote server Pin
AYcoder28-Jul-06 7:14
memberAYcoder28-Jul-06 7:14 
GeneralBoost's FileSystem library is probably a better choice Pin
Joe Montgomery15-Jun-05 18:56
sussJoe Montgomery15-Jun-05 18:56 
GeneralRe: Boost's FileSystem library is probably a better choice Pin
SevenCat27-Mar-06 17:16
memberSevenCat27-Mar-06 17:16 
QuestionBug? Pin
Bob Palin7-Jun-05 19:27
memberBob Palin7-Jun-05 19:27 
AnswerRe: Bug? Pin
Fess8-Jun-05 0:03
memberFess8-Jun-05 0:03 
GeneralRe: Bug? Pin
Bagpuss30-Dec-05 4:37
memberBagpuss30-Dec-05 4:37 
GeneralNot supporting _UNICODE Pin
Lemaire Guillaume27-Jan-05 7:09
memberLemaire Guillaume27-Jan-05 7:09 
GeneralRe: Not supporting _UNICODE [modified] Pin
Peter Weyzen29-Sep-06 12:53
memberPeter Weyzen29-Sep-06 12:53 
Questioncan u help me ? Pin
thekillerm18-Dec-04 7:21
memberthekillerm18-Dec-04 7:21 
AnswerRe: can u help me ? Pin
Fess66219-Dec-04 23:54
memberFess66219-Dec-04 23:54 
GeneralfolderCopy not working Pin
ctudd9-Sep-04 20:27
sussctudd9-Sep-04 20:27 
GeneralfolderCopy are working Pin
Fess66220-Dec-04 0:20
memberFess66220-Dec-04 0:20 
GeneralPoor Copy() functionality ! Pin
ChristophF31-Aug-04 23:11
memberChristophF31-Aug-04 23:11 
GeneralRe: Poor Copy() functionality ! Pin
Fess66231-Aug-04 23:51
memberFess66231-Aug-04 23:51 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.161208.2 | Last Updated 31 Mar 2004
Article Copyright 2004 by Fess
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid