Commit 006fb95f authored by Ken Martin's avatar Ken Martin

ENH: add a higher performance method to get the number of files in a directory

parent e95a0fff
......@@ -143,6 +143,47 @@ bool Directory::Load(const char* name)
return _findclose(srchHandle) != -1;
}
unsigned long Directory::GetNumberOfFilesInDirectory(const char* name)
{
#if _MSC_VER < 1300
long srchHandle;
#else
intptr_t srchHandle;
#endif
char* buf;
size_t n = strlen(name);
if ( name[n - 1] == '/' )
{
buf = new char[n + 1 + 1];
sprintf(buf, "%s*", name);
}
else
{
buf = new char[n + 2 + 1];
sprintf(buf, "%s/*", name);
}
struct _finddata_t data; // data of current file
// Now put them into the file array
srchHandle = _findfirst(buf, &data);
delete [] buf;
if ( srchHandle == -1 )
{
return 0;
}
// Loop through names
unsigned long count = 0;
do
{
count++;
}
while ( _findnext(srchHandle, &data) != -1 );
_findclose(srchHandle);
return count;
}
} // namespace KWSYS_NAMESPACE
#else
......@@ -174,6 +215,24 @@ bool Directory::Load(const char* name)
return 1;
}
unsigned long Directory::GetNumberOfFilesInDirectory(const char* name)
{
DIR* dir = opendir(name);
if (!dir)
{
return 0;
}
unsigned long count = 0;
for (dirent* d = readdir(dir); d; d = readdir(dir) )
{
count++;
}
closedir(dir);
return count;
}
} // namespace KWSYS_NAMESPACE
#endif
......@@ -47,6 +47,12 @@ public:
*/
unsigned long GetNumberOfFiles() const;
/**
* Return the number of files in the specified directory.
* A higher performance static method.
*/
static unsigned long GetNumberOfFilesInDirectory(const char*);
/**
* Return the file at the given index, the indexing is 0 based
*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment