Click here to Skip to main content
15,867,308 members
Articles / Desktop Programming / MFC
Article

Folder Utility: Create Path, Remove Folder, Remove All Files

Rate me:
Please Sign up or sign in to vote.
4.54/5 (25 votes)
6 Jun 2005 113.5K   1.8K   36   12
CreateDir function creates folders and subfolders thereby completing the whole path. This function overcomes the limitations of CreateDirectory Win32 API.

Introduction

The CreateDir function creates folders and subfolders thereby completing the whole path passed to it. If the folder already exists, it is left unaffected, but if it doesn't exist, it is created. The CreateDirectory WIN32 API lets us create a directory, but it works only if the parent directory already exists. This function overcomes this limitation.

void CreateDir(char* Path)
{
 char DirName[256];
 char* p = Path;
 char* q = DirName; 
 while(*p)
 {
   if (('\\' == *p) || ('/' == *p))
   {
     if (':' != *(p-1))
     {
        CreateDirectory(DirName, NULL);
     }
   }
   *q++ = *p++;
   *q = '\0';
 }
 CreateDirectory(DirName, NULL);
}

The DeleteAllFiles function deletes all the files (not folders) present in the specified path:

void DeleteAllFiles(char* folderPath)
{
 char fileFound[256];
 WIN32_FIND_DATA info;
 HANDLE hp; 
 sprintf(fileFound, "%s\\*.*", folderPath);
 hp = FindFirstFile(fileFound, &info);
 do
    {
       sprintf(fileFound,"%s\\%s", folderPath, info.cFileName);
       DeleteFile(fileFound);
 
    }while(FindNextFile(hp, &info)); 
 FindClose(hp);
}

The EmptyDirectory function deletes all the contents from a specified directory. The RemoveDirectory WIN32 API deletes an existing empty directory, but it doesn't work if the directory isn't empty. This function overcomes this limitation:

void EmptyDirectory(char* folderPath)
{
 char fileFound[256];
 WIN32_FIND_DATA info;
 HANDLE hp; 
 sprintf(fileFound, "%s\\*.*", folderPath);
 hp = FindFirstFile(fileFound, &info);
 do
    {
        if (!((strcmp(info.cFileName, ".")==0)||
              (strcmp(info.cFileName, "..")==0)))
        {
          if((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==
                                     FILE_ATTRIBUTE_DIRECTORY)
          {
              string subFolder = folderPath;
              subFolder.append("\\");
              subFolder.append(info.cFileName);
              EmptyDirectory((char*)subFolder.c_str());
              RemoveDirectory(subFolder.c_str());
          }
          else
          {
              sprintf(fileFound,"%s\\%s", folderPath, info.cFileName);
              BOOL retVal = DeleteFile(fileFound);
          }
        }
 
    }while(FindNextFile(hp, &info)); 
 FindClose(hp);
}

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


Written By
Technical Lead Leading Services Organization
India India
Working as a Technology Lead in Mobility domain (Mobile applications: Android, IPhone) with an India Based Leading Services Organization.

Areas of interests includes SOA, Mobility, Design Patterns.

As part of services organization, worked with market Leader Firms into Networking, Security & Mobility spaces.

Comments and Discussions

 
Generaluseful Pin
Jeff cat28-Oct-14 15:46
Jeff cat28-Oct-14 15:46 
GeneralCheck for FILE_ATTRIBUTE_READONLY attribute before try to delete file [modified] Pin
Julian Popov2-Feb-10 3:22
Julian Popov2-Feb-10 3:22 
GeneralA permission request. Pin
Vincent-Lin31-Aug-09 20:14
Vincent-Lin31-Aug-09 20:14 
Dear Birender Singh:

Thanks for the codes that you were contributed.
They are really useful, you are appreciated.

Do you mind if I remake a package, for people who as needed as I did in visual C++ 6.0.
I only referred the deleting-cache part of your code.

Of course, it's not for commercial usage.
Thanks to you again. Smile | :)
GeneralNo success/fail returned Pin
Neville Franks3-Dec-07 17:46
Neville Franks3-Dec-07 17:46 
GeneralUse the UNICODE versions.... Pin
Ben Burnett14-Sep-07 9:20
Ben Burnett14-Sep-07 9:20 
GeneralThank you Pin
YoSilver9-Jan-07 7:35
YoSilver9-Jan-07 7:35 
Generaleasier way Pin
David White11-Apr-06 5:50
David White11-Apr-06 5:50 
GeneralRe: easier way Pin
Michael Stammberger7-May-09 23:39
Michael Stammberger7-May-09 23:39 
Generali got help from your code Pin
ewighell6-Apr-06 22:06
ewighell6-Apr-06 22:06 
GeneralGood, but... Pin
Geert van Horrik6-Jun-05 19:59
Geert van Horrik6-Jun-05 19:59 
QuestionMAX_PATH ? Pin
Zalosny6-Jun-05 8:23
Zalosny6-Jun-05 8:23 
GeneralRead Only Files Pin
Kacee Giger6-Jun-05 6:05
Kacee Giger6-Jun-05 6:05 

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.