Click here to Skip to main content
Click here to Skip to main content

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

By , 6 Jun 2005
Rate this:
Please Sign up or sign in to vote.

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

About the Author

Birender Singh
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

 
GeneralCheck for FILE_ATTRIBUTE_READONLY attribute before try to delete file [modified] PinmemberJulian Popov2-Feb-10 3:22 
GeneralA permission request. PinmemberVincent-Lin31-Aug-09 20:14 
GeneralNo success/fail returned PinmemberNeville Franks3-Dec-07 17:46 
GeneralUse the UNICODE versions.... PinmemberBen Burnett14-Sep-07 9:20 
GeneralThank you PinmemberYoSilver9-Jan-07 7:35 
Generaleasier way PinmemberDavid White11-Apr-06 5:50 
GeneralRe: easier way PinmemberMichael Stammberger7-May-09 23:39 
Generali got help from your code Pinmemberewighell6-Apr-06 22:06 
GeneralGood, but... PinmemberGeert van Horrik6-Jun-05 19:59 
QuestionMAX_PATH ? PinsussKrodex6-Jun-05 8:23 
GeneralRead Only Files PinmemberKacee Giger6-Jun-05 6:05 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    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 | Mobile
Web01 | 2.8.140415.2 | Last Updated 6 Jun 2005
Article Copyright 2005 by Birender Singh
Everything else Copyright © CodeProject, 1999-2014
Terms of Use
Layout: fixed | fluid