ENH: add a higher performance method to get the number of files in a directory
This commit is contained in:
parent
55b0935a79
commit
847c3a5849
|
@ -1024,9 +1024,8 @@ int cmake::ExecuteCMakeCommand(std::vector<std::string>& args)
|
|||
fclose(progFile);
|
||||
}
|
||||
}
|
||||
cmsys::Directory dir;
|
||||
dir.Load(dirName.c_str());
|
||||
int fileNum = static_cast<int>(dir.GetNumberOfFiles());
|
||||
int fileNum = static_cast<int>
|
||||
(cmsys::Directory::GetNumberOfFilesInDirectory(dirName.c_str()));
|
||||
// read the count
|
||||
fName = dirName;
|
||||
fName += "/count.txt";
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue