Click to See Complete Forum and Search --> : Receiving all the subdirs in a dir


JoeGuru
August 21st, 1999, 12:33 PM
OK. Let's say I have a directory under "C:\xy" and it's full of other subdirectories. I would like to get all the names of the subdirectories from "C:\xy", put them in ABC order, than display them in a listbox. The listbox part is OK, put whassup with the others?

Could someone help?

Thanks: Joe :)

Wyne
August 21st, 1999, 02:47 PM
All you need to do is to arrange every thing in your preffered order Either all files separately or in alphabetic order, and then just recurse through the subdirectories.
i.e.
Searchdir(Path){
iterate through dir and put items in an array(you might want to separate dirs at this time)
iterate through the array and see if a member is file or dir.
if member is a directory then Searchdir(thisMember);
}
you might want to look at the FindFirstFile in MSDN
Wyne

dmadden
August 21st, 1999, 03:01 PM
Joe,

The code below will let you recursively go through directories. The code also
give you the ability to get filenames also. You can comment out what you want!

As far as the sorted goes sort the List!

///////////////////////////////////////////////////////////////////////////////
// FUNCTION: Recurse
//
// PURPOSE: To search a given directory (recursively)
//
// PARAMETERS:
// @param1 - CString strDirName - Path of the file/directory search
//
// RETURN: Nothing.
///////////////////////////////////////////////////////////////////////////////
void Recurse(CString strDirName)
{
WIN32_FIND_DATA wfd;
HANDLE hFind;
CString strDirText; // This will contain your Dir Name (and PATH)
CString strFileText; // This will contain your File Name (and PATH)

char Buf[254];
char DirBuf[254];
char FileBuf[254];
CString ShareName, Dir, FName, Ext;
ULONGLONG uhDirSize; // These only need to be DWORDs I did this for CRC Checking
ULONGLONG uhFileSize;// These only need to be DWORDs I did this for CRC Checking

// this is just if I decide to Abort in the middle of a search
// volatile BOOL m_bAbort;
if (!m_bAbort) {
uhDirSize = 0;
// Check if the last char is a back-slash
// (If not, put it there)
if (strDirName.Right(1) != "\\")
strDirName += _T("\\");

// set the variable and add an astrix for
// the beginning of the directory search.
strText = strDirName + _T("*");

// Iterate through dirs
hFind = FindFirstFile(strText, &wfd);
if (hFind != INVALID_HANDLE_VALUE) {
do {
if (m_bAbort) return;

// Check if "." or "..", if not...
// Check if its a directory.
if ((strcmp(wfd.cFileName,_T("."))) && (strcmp(wfd.cFileName,_T(".."))) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
// Set to the directory found.
strDirText = strDirName + wfd.cFileName;

if (m_bAbort)
return;

// If we need to recursively search, then do so.
if (m_Recurse) {
// Call this function again.
Recurse(strDirText);
}
}
} while (FindNextFile(hFind, &wfd));
// This is a MUST
FindClose(hFind);
}

// Iterate through files
//
// set the variable and add an astrix-dot-astrix "*.*"
// for the beginning of the file search.
strText = strDirName + _T("*.*");//strMask;
hFind = FindFirstFile(strText, &wfd);
if (hFind != INVALID_HANDLE_VALUE) {
do {
if (m_bAbort)
return;

// If NOT a directory...
if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) {
// Set to the file found.
strFileText = strDirName + wfd.cFileName;
strFileText.MakeUpper();
// Get the size of the file.
uhFileSize = (wfd.nFileSizeHigh << 32) + wfd.nFileSizeLow;
uhDirSize += uhFileSize;
}
} while (FindNextFile(hFind, &wfd));
// This is a MUST
FindClose(hFind);
}
} // end abort
}




Thanks in advance,

Dan