Re: How can I enumerate directory content in MFC?
"Electronic75" <Electronic75@discussions.microsoft.com> ha scritto nel
messaggio news:32B26F76-F1B6-420D-9F02-CE798989EC03@microsoft.com...
have to list directory
content and then look for names.
You may consider the following simple code I developed.
The function ListFilesInDirectory takes as input the directory path, and
returns the list of files in the directory (using std::vector as a container
for filenames).
You can use like this:
<code>
CString directory = _T("C:\\SomeData");
std::vector< CString > filenames;
ListFilesInDirectory( directory, filenames );
// filenames contain the list of files in input directory
</code>
ListFilesInDirectory implementation follows:
<code>
//========================================================================
// Given a directory pathname, returns the list of files (full pathname)
// present in that directory. The returned list can be empty, if the
// directory is empty.
//
//
// Note - subdirectories:
// ----------------------
// If there are subdirectories under specified directory, they are
// ignored by this function.
//
//
// Note - vector:
// --------------
// The file path list is returned in a std::vector container, so
// <vector> STL header must be #included in StdAfx.h.
//
//========================================================================
void ListFilesInDirectory(
LPCTSTR dirName,
std::vector< CString > & filepaths )
{
// Check input parameters
ASSERT( dirName != NULL );
// Clear filename list
filepaths.clear();
// Object to enumerate files
CFileFind finder;
// Build a string using wildcards *.*,
// to enumerate content of a directory
CString wildcard( dirName );
wildcard += _T("\\*.*");
// Init the file finding job
BOOL working = finder.FindFile( wildcard );
// For each file that is found:
while ( working )
{
// Update finder status with new file
working = finder.FindNextFile();
// Skip '.' and '..'
if ( finder.IsDots() )
{
continue;
}
// Skip sub-directories
if ( finder.IsDirectory() )
{
continue;
}
// Add file path to container
filepaths.push_back( finder.GetFilePath() );
}
// Cleanup file finder
finder.Close();
}
</code>
HTH,
Giovanni