Re: Scan Directory
Hi,
It is platform specific however differentiating between unix/linux and
windows will cover most systems. Here is some code I use to read directories
on unix/linux/windows:
You need dirent.h header on unix/linux systems, I use WIN32 macro to
differentiate between the two
////////////////////////////////////////////////////////////
// Dir.cc
//-----------------------------------------------------------
// Author : Ron AF Greve
// Date : 20011104
//-----------------------------------------------------------
////////////////////////////////////////////////////////////
static char rcsid[] = "$Id: Dir.cc,v 1.4 2003/04/08 05:51:39 rgreve Exp $";
#include "stdafx.h"
//#include <dirent.h>
#include "Dir.h"
#include <iostream>
#include "InfoException.h"
#include "Log.h"
extern CLog Log;
using namespace std;
bool CDir::Read()
{
#ifndef _WIN32
bool RetVal = true;
DIR *Dir = 0;
DirEntries.clear();
if( !( Dir = opendir( Dirname.c_str() ) ) )
{
cerr << __FILE__ << ":" << __LINE__ << " Could not open <" << Dirname <<
">" << endl;
RetVal = false;
}
else
{
struct dirent *DirEnt = 0;
while( ( DirEnt = readdir( Dir ) ) )
{
if( RegExp )
{
if( *RegExp == string( DirEnt->d_name ) ) DirEntries.push_back(
CDirEntry( &Dirname, DirEnt->d_name, DirEnt->d_ino ) );
}
else
{
DirEntries.push_back( CDirEntry( &Dirname, DirEnt->d_name,
DirEnt->d_ino ) );
}
}
closedir( Dir );
}
#else
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
bool RetVal = true;
vector<string> TextFiles;
string Wild = Dirname;
if( !Wild.empty() )
{
if( *Wild.rbegin() != '\\' ) Wild += '\\';
}
string Dir = Wild;
Wild += RegExp;
hFind = FindFirstFileEx( Wild.c_str(), FindExInfoStandard, &FindFileData,
FindExSearchNameMatch, NULL, 0 );
if (hFind == INVALID_HANDLE_VALUE)
{
stringstream Error;
Error << "Invalid File Handle. GetLastError reports " << GetLastError ()
<< endl;
// AfxMessageBox( Error.str().c_str(), MB_ICONSTOP );
Log << Level1 << "Invalid File Handle" << End;
throw CInfoException( Error.str() );
RetVal = false;
}
else
{
do
{
// DirEntries.push_back( CDirEntry( &Dirname, DirEnt->d_name,
DirEnt->d_ino ) );
DirEntries.push_back( CDirEntry( &Dirname, FindFileData.cFileName, 0 ) );
}
while( FindNextFile( hFind, &FindFileData ) );
FindClose(hFind);
}
#endif
return RetVal;
}
Regards, Ron AF Greve
http://moonlit.xs4all.nl
"Arman Sahakyan" <armancho_x@rambler.ru(donotspam)> wrote in message
news:FA83CB98-8857-4BDA-840F-9501B05039FC@microsoft.com...
Hi,
How to retrieve all the file and directory names in a given directory.
I do not need Win32 API functions but a C/C++ function.
(it is supposed that the function will work in UNIX too).
Thanks in advance
--
======
Arman