Recently, I continued to learn C ++ and wrote code for Traversing folders. I hope you can advise me.
- Void common: file: readfiles (const wstring & directory, const wstring & Extentions, void (* filemethod) (const wstring &))
- {
- Win32_find_data finddata;
- Zeromemory (& finddata, sizeof (finddata); // initialize finddata
- Wstring findfilename (directory );
- Wstring fulldirectoryname (directory );
- If (directory [directory. Length ()-1] = '//')
- {
- Findfilename + = Extentions;
- Fulldirectoryname = directory;
- }
- Else
- {
- Findfilename + = l' // '+ Extentions;
- Fulldirectoryname + = l '//';
- }
- Handle hfind = findfirstfile (findfilename. c_str (), & finddata );
If (hfind = invalid_handle_value)
Return;
Findnextfile (hfind, & finddata );
Vector <wstring> dirlist;
While (findnextfile (hfind, & finddata ))
{
If (finddata. dwfileattributes & file_attribute_directory) = file_attribute_directory)
{
Dirlist. push_back (fulldirectoryname + finddata. cfilename );
}
Else
{
Wstring fullfilename (fulldirectoryname + finddata. cfilename );
Filemethod (fullfilename); // What do you do to traverse a file?
}
}
- For (vector <wstring >:: iterator iter = dirlist. Begin ();
- ITER! = Dirlist. End (); ++ ITER)
- {
- Readfiles (* ITER, Extentions, filemethod );
- }
- }
In this Code, I used a function pointer to process what to do after traversing a file. The declaration method of C ++ function pointers is really great. If you can support writing to lambda expressions, it is perfect.