Foam::instantList Foam::Time::findTimes ( const fileName& directory, const word& constantName ) { if (debug) { InfoInFunction << "Finding times in directory " << directory << endl; } // Read directory entries into a list fileNameList dirEntries ( fileHandler().readDir ( directory, fileName::DIRECTORY ) ); // Initialise instant list instantList Times(dirEntries.size() + 1); label nTimes = 0; // Check for "constant" bool haveConstant = false; forAll(dirEntries, i) { if (dirEntries[i] == constantName) { Times[nTimes].value() = 0; Times[nTimes].name() = dirEntries[i]; nTimes++; haveConstant = true; break; } } // Read and parse all the entries in the directory forAll(dirEntries, i) { IStringStream timeStream(dirEntries[i]); token timeToken(timeStream); if (timeToken.isNumber() && timeStream.eof()) { Times[nTimes].value() = timeToken.number(); Times[nTimes].name() = dirEntries[i]; nTimes++; } }
// Read a directory and return the entries as a string list Foam::fileNameList Foam::readDir ( const fileName& directory, const fileName::Type type, const bool filtergz ) { // Initial filename list size // also used as increment if initial size found to be insufficient static const int maxNnames = 100; if (POSIX::debug) { Info<< "readDir(const fileName&, const fileType, const bool filtergz)" << " : reading directory " << directory << endl; } // Setup empty string list MAXTVALUES long fileNameList dirEntries(maxNnames); // Pointers to the directory entries DIR *source; struct dirent *list; // Temporary variables and counters label nEntries = 0; // Attempt to open directory and set the structure pointer if ((source = opendir(directory.c_str())) == NULL) { dirEntries.setSize(0); if (POSIX::debug) { Info<< "readDir(const fileName&, const fileType, " "const bool filtergz) : cannot open directory " << directory << endl; } } else { // Read and parse all the entries in the directory while ((list = readdir(source)) != NULL) { fileName fName(list->d_name); // Ignore files begining with ., i.e. '.', '..' and '.*' if (fName.size() && fName[0] != '.') { word fExt = fName.ext(); if ( (type == fileName::DIRECTORY) || ( type == fileName::FILE && fName[fName.size() - 1] != '~' && fExt != "vtk" && fExt != "bak" && fExt != "BAK" && fExt != "old" && fExt != "save" ) ) { if ((directory/fName).type() == type) { if (nEntries >= dirEntries.size()) { dirEntries.setSize(dirEntries.size() + maxNnames); } if (filtergz && fExt == "gz") { dirEntries[nEntries++] = fName.lessExt(); } else { dirEntries[nEntries++] = fName; } } } } } // Reset the length of the entries list dirEntries.setSize(nEntries); closedir(source); } return dirEntries; }
// Read a directory and return the entries as a string list fileNameList readDir ( const fileName& directory, const fileName::Type type, const bool filtergz ) { // Initial filename list size // also used as increment if initial size found to be insufficient const int maxNnames = 100; if (MSwindows::debug) { Info<< "readDir(const fileName&, const fileType, const bool filtergz)" << " : reading directory " << directory << endl; } // Setup empty string list MAXTVALUES long fileNameList dirEntries(maxNnames); // Temporary variables and counters label nEntries = 0; MSwindows::DirectoryIterator dirIt(directory); if (dirIt.isValid()) { while (dirIt.hasNext()) { const fileName & fName = dirIt.next(); // ignore files begining with ., i.e. '.', '..' and '.*' if (fName.size() > 0 && fName[size_t(0)] != '.') { word fileNameExt = fName.ext(); if ( (type == fileName::DIRECTORY) || ( type == fileName::FILE && fName[fName.size()-1] != '~' && fileNameExt != "bak" && fileNameExt != "BAK" && fileNameExt != "old" && fileNameExt != "save" ) ) { if ((directory/fName).type() == type) { if (nEntries >= dirEntries.size()) { dirEntries.setSize(dirEntries.size() + maxNnames); } if (filtergz && fileNameExt == "gz") { dirEntries[nEntries++] = fName.lessExt(); } else { dirEntries[nEntries++] = fName; } } } } } } else if (MSwindows::debug) { Info<< "readDir(const fileName&, const fileType, " "const bool filtergz) : cannot open directory " << directory << endl; } // Reset the length of the entries list dirEntries.setSize(nEntries); return dirEntries; }