2007年9月19日星期三

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

Folder Utility: Create Path, Remove Folder, Remove All Files
By Birender Singh.

CreateDir function creates folders and subfolders thereby completing the whole path. This function overcomes the limitations of CreateDirectory Win32 API.
C++ (VC5, VC6), C
Windows
MFC, Win32, VS
Dev
Posted: 6 Jun 2005
Views: 25,989
Announcements


Search
Advanced Search
Sitemap
PrintBroken Article?Bookmark Discuss Send to a friend
17 votes for this article.
Popularity: 5.21. Rating: 4.23 out of 5.
  • You are signed up for one or more newsletters but unfortunately we are unable to send you emails. Please click here to have an email sent that will allow us to confirm your email address.

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:

Collapse
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);
}

没有评论: