| | |
Transversing the MS-Windows File System
Please support our C++ advertiser: Intel Parallel Studio Home
![]() |
This is a simple example of how to use recursion to get a list of all the directories (folders) and file names within them. It also illustrates simple use if std::list, std::vector, std::string, std::cin and std::cout. It was compiled and tested with both VC++ 6.0 and Dev-C++ compilers on XP Pro.
C++ Syntax (Toggle Plain Text)
// The next two lines are for VC++ 6.0 compiler. You should // delete them if you compile it with a different compiler. #include "stdafx.h" #pragma warning(disable: 4786) #include <io.h> #include <string> #include <vector> #include <list> #include <iostream> using namespace std; // structure to hold a directory and all its filenames. struct FILELIST { string path; vector<string> theList; }; void TransverseDirectory(string path, list<FILELIST>& theList) { struct _finddatai64_t data; // First create the filename that will be use to initialize the find. // "*.*" are wild card characters that tells the find function to return a // list of all the files and directories. You can limit this if you wish // to just file with specific extensions, for example "*.txt". If you do that // then finder will not return any directory names. string fname = path + "\\*.*"; // start the finder -- on error _findfirsti64() will return -1, otherwise if no // error it returns a handle greater than -1. long h = _findfirsti64(fname.c_str(),&data); if(h >= 0) { FILELIST thisList; // add empty FILELIST structure to the linked list argument theList.push_back(thisList); // get pointer to the FILELIST just added to the linked list above. list<FILELIST>::iterator it = theList.end(); it--; // set current path (*it).path = path; do { if( (data.attrib & _A_SUBDIR) ) { // make sure we skip "." and "..". Have to use strcmp here because // some file names can start with a dot, so just testing for the // first dot is not suffient. if( strcmp(data.name,".") != 0 &&strcmp(data.name,"..") != 0) { // We found a sub-directory, so get the files in it too fname = path + "\\" + data.name; // recursion here! TransverseDirectory(fname,theList); } } else { // this is just a normal filename. So just add it to our vector (*it).theList.push_back(data.name); } }while( _findnexti64(h,&data) == 0); // close the find handle. _findclose(h); } } int main(int argc, char* argv[]) { list<FILELIST> MyList; string path; cout << "Enter starting path ... "; getline(cin,path); TransverseDirectory(path,MyList); list<FILELIST>::iterator it; // now just display all the files for(it = MyList.begin(); it != MyList.end(); it++) { vector<string>::iterator its; for(its = (*it).theList.begin(); its != (*it).theList.end(); its++) { cout << (*it).path + "\\" + (*its) << endl; } } cin.ignore(); return 0; }
![]() |
Similar Threads
- missing or corrupt <windows root>/system 32 hal.dll (Windows NT / 2000 / XP)
- File System Error 1026???? (Windows 95 / 98 / Me)
- Windows File Recovery Programs? (Windows NT / 2000 / XP)
- extending windows "file system" attributes (C#)
- windows file protection (Windows NT / 2000 / XP)
- Cannot detect the drive names and their file system (Windows NT / 2000 / XP)
- a device file in system.ini file damaged (Windows 95 / 98 / Me)
Other Threads in the C++ Forum
- Previous Thread: Handling Text from a multi-line edit box (win32api with c++)
- Next Thread: another question
| Thread Tools | Search this Thread |
api array based beginner binary bitmap c++ c/c++ calculator char char* class code coding compile compiler console conversion count data database delete deploy developer dll download dynamic dynamiccharacterarray email encryption error file forms fstream function functions game getline givemetehcodez graph gui homeworkhelp homeworkhelper iamthwee ifstream input int java lib linkedlist linker list loop looping loops map math matrix memory multiple news node number numbertoword output parameter pointer problem program programming project proxy python random read recursion recursive reference rpg sorting string strings temperature template test text text-file tree url variable vector video visual visualstudio win32 windows winsock word wordfrequency wxwidgets







