Empty Directory Utility Under NT

Environment: Tested on Windows NT (SP5) with Visual C++ 6 (SP4)

Description

What is it ?

A "Del [Path\]*.*" /sxyz" NT utility.

Explanations:

I had to write a "Empty Directory" utility on WIN NT, without using Shell. So I wrote this function. I think it can be usefull for programmers who don't have time to learn Files under NT.
This is a recursive function which delete all the directories and files inside the directory sent as a parameter (sPath). The Parameter 'sPath' has to be a full path name without "\\" at the end.
So is it !

Attention !

With this call, you can empty every directory also important one. I am not responsible for deleting important data with my Code !

Return Value:

TRUE if the directory exists,
FALSE if it not.

Code

// Include this line before your code where you call 
// this function !
BOOL EmptyDirectory(CString &sPath);

// This is a recursive function which empty a directory path 
// of its files and call itself if necessary to delete
// subdirectories.
BOOL EmptyDirectory(CString &sPath)
{
 CFileFind finder;

 CString  sWildCard = sPath + "\\*.*";

 BOOL bFound;
 BOOL bWorking = finder.FindFile(sWildCard);

 bFound = bWorking;

 while (bWorking) 
 {
  bWorking = finder.FindNextFile();

  if (finder.IsDots()) continue;

  if (finder.IsDirectory()) 
  {
   CString s = finder.GetFilePath();
   EmptyDirectory(s);
   RemoveDirectory(finder.GetFilePath());
   continue; 
  }
  _unlink( finder.GetFilePath() );

 }

 return bFound;
}


Comments

  • Thanks

    Posted by Legacy on 08/06/2003 12:00am

    Originally posted by: vijay

    Thanks

    Reply
  • Just a small helpful addition...

    Posted by Legacy on 04/22/2003 12:00am

    Originally posted by: Eyes`Only

    FYI-

    If you add the line...

    sPath.TrimRight('\\');

    ... right before your line ...

    CString sWildCard = sPath + "\\*.*";

    ... you effectively remove the requirement "The Parameter 'sPath' has to be a full path name without "\\" at the end."

    Just in case anyone wants to errorproof their code the easy way :)

    Eyes`Only

    Reply
  • you just won the first place! congrats.

    Posted by Legacy on 04/13/2003 12:00am

    Originally posted by: Stan

    Could it be any more trivial? Your article just won the first place in our yearly "10 most trivial pieces of code" competition.

    Reply
  • Great

    Posted by Legacy on 03/12/2003 12:00am

    Originally posted by: Anuo

    Oh yeah! I just like this.

    Reply
  • Big thanks from a total beginner

    Posted by Legacy on 11/16/2002 12:00am

    Originally posted by: bodozer

    Thanks for the code.
    I found it very useable for my project.
    I'm totally new in VC++.
    I used BC++ (for DOS) 10-15 years ago.

    regards bodozer,

    Reply
  • read only directory

    Posted by Legacy on 09/09/2002 12:00am

    Originally posted by: brownbro

    What if the directory is read only ? I've had challenges in the past with RemoveDirectory() returning an error when the directory is read only.

    Reply
  • NON-MFC Version

    Posted by Legacy on 07/18/2002 12:00am

    Originally posted by: J.T. Gilkeson

    Here's the NON-MFC version:
    
    

    // This is a recursive function which empty a directory path
    // of its files and call itself if necessary to delete
    // subdirectories.
    BOOL EmptyDirectory(LPCSTR lpFolder)
    {
    WIN32_FIND_DATA ff;
    char absPath[MAX_PATH];
    char lpDeleteFolder[MAX_PATH];

    strcpy(lpDeleteFolder, lpFolder);
    strcat(lpDeleteFolder, "\\*.*");

    HANDLE hFile = FindFirstFile(lpDeleteFolder, &ff);
    BOOL bWorking = (INVALID_HANDLE_VALUE != hFile);
    BOOL bFound = bWorking;

    while (bWorking)
    {
    strcpy(absPath, lpFolder);
    strcat(absPath, "\\");
    strcat(absPath, ff.cFileName);

    if ((0 == strcmp(ff.cFileName, ".")) || (0 == strcmp(ff.cFileName, "..")))
    NULL;
    else if (ff.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    {
    // RECURSIVE CASE: Call with subdirectory
    EmptyDirectory(absPath);
    RemoveDirectory(absPath);
    }
    else
    DeleteFile(absPath);

    bWorking = FindNextFile(hFile, &ff);
    }

    //BASE CASE: No more subdirs
    FindClose(hFile);

    return bFound;
    }


    Reply
  • GREAT CODE!

    Posted by Legacy on 03/10/2002 12:00am

    Originally posted by: Dian Suharto

    Simple, nice and working code.

    Thanks!!!

    Dian Suharto

    Reply
  • great code

    Posted by Legacy on 02/19/2002 12:00am

    Originally posted by: anand

    great code.It simplified my work

    Reply
  • Great for beginners

    Posted by Legacy on 02/11/2002 12:00am

    Originally posted by: Chris Hunter

    I am just beginning Visual C++ programming. I found this article and it looks to be extremely helpful. I just wanted to say thanks.

    Reply
  • Loading, Please Wait ...

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Even with today's emphasis on mobility, desktop innovation still matters. The ThinkCentre® Tiny-in-One 23 sets a new standard for transformational PC possibilities, bringing breakthrough modular all-in-one ease of use, Intel® performance, integrated security, and legendary durability together with the ThinkCentre Tiny PC family. The ThinkCentre Tiny-in-One 23 gives IT a single desktop platform that carefully balances performance, efficiency, and flexibility. The breakthrough all-in-one form factor …

  • Live Event Date: February 25, 2015 @ 2:00 p.m. ET / 11:00 a.m. PT Secure Shell (SSH) keys provide unmitigated access for privileged users and applications. However, managing and securing these critical privileged credentials poses a real challenge for organizations, putting sensitive data at risk. In fact, more than 50% of organizations report experiencing an SSH Key related compromise. Check out this upcoming eSeminar and join Adam Bosnian, EVP of Global Business Development at CyberArk, as he discusses the …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date