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);
|
fclose(progFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cmsys::Directory dir;
|
int fileNum = static_cast<int>
|
||||||
dir.Load(dirName.c_str());
|
(cmsys::Directory::GetNumberOfFilesInDirectory(dirName.c_str()));
|
||||||
int fileNum = static_cast<int>(dir.GetNumberOfFiles());
|
|
||||||
// read the count
|
// read the count
|
||||||
fName = dirName;
|
fName = dirName;
|
||||||
fName += "/count.txt";
|
fName += "/count.txt";
|
||||||
|
@ -143,6 +143,47 @@ bool Directory::Load(const char* name)
|
|||||||
return _findclose(srchHandle) != -1;
|
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
|
} // namespace KWSYS_NAMESPACE
|
||||||
|
|
||||||
#else
|
#else
|
||||||
@ -174,6 +215,24 @@ bool Directory::Load(const char* name)
|
|||||||
return 1;
|
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
|
} // namespace KWSYS_NAMESPACE
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -47,6 +47,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
unsigned long GetNumberOfFiles() const;
|
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
|
* Return the file at the given index, the indexing is 0 based
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user