X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fstd%2Fsrc%2FbbstdFilesFromDirectory.cxx;h=4caeae3c6cc4a96500ade9515abaeade4250e929;hb=1ba1a0e223adf11163b6e12ad5fe999b0f87add7;hp=61fb34c9c5a4e6a2b4bd93446c9367faa5a7e6d7;hpb=6827eadc2157e47cc354282c7992fe052e6b5ca0;p=bbtk.git diff --git a/packages/std/src/bbstdFilesFromDirectory.cxx b/packages/std/src/bbstdFilesFromDirectory.cxx index 61fb34c..4caeae3 100644 --- a/packages/std/src/bbstdFilesFromDirectory.cxx +++ b/packages/std/src/bbstdFilesFromDirectory.cxx @@ -49,19 +49,27 @@ void FilesFromDirectory::Process() { Filenames.clear(); SimpleFilenames.clear(); - DirName = bbGetInputIn(); - bool rec = bbGetInputRecursive(); - /*int nbFiles = */ Explore(DirName, rec); - CleanFilenames( bbGetInputIn() ); + + if (bbGetInputActive()==true) + { + if (bbGetInputIn()!="") + { + DirName = bbGetInputIn(); + /*int nbFiles = */ Explore(DirName, bbGetInputRecursive(), bbGetInputRecursiveLevel() ); + CleanFilenames( DirName ); + } // if In + } // Active bbSetOutputOut(Filenames); bbSetOutputOutSimple(SimpleFilenames); } void FilesFromDirectory::bbUserSetDefaultValues() { + bbSetInputActive(true); bbSetInputIn("."); bbSetInputRecursive(false); bbSetInputType(0); + bbSetInputRecursiveLevel(999); } void FilesFromDirectory::bbUserInitializeProcessing() @@ -87,7 +95,7 @@ std::string FilesFromDirectory::NormalizePath(std::string const &pathname) std::string name = pathname; int size = name.size(); - if ( name[size-1] != FILESEPARATOR ) + if (!((name[size-1]=='/')||(name[size-1]=='\\'))) { name += FILESEPARATOR; } @@ -103,11 +111,14 @@ std::string FilesFromDirectory::NormalizePath(std::string const &pathname) -int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive) +int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive, int recursiveLevel) { - int numberOfFiles = 0; - std::string dirName = NormalizePath(dirpath); - int tmpNumberOfFiles; + int numberOfFiles = 0; + +if (recursiveLevel>=0){ + + std::string dirName = NormalizePath(dirpath); + int tmpNumberOfFiles; std::string fileName; #ifdef _MSC_VER WIN32_FIND_DATA fileData; @@ -130,7 +141,7 @@ int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive) numberOfFiles++; } // Type ALL_directories - tmpNumberOfFiles = Explore(dirName+fileName, recursive); + tmpNumberOfFiles = Explore(dirName+fileName, recursive,recursiveLevel-1); if ((bbGetInputType()==2)&&tmpNumberOfFiles==0) { std::string temp = dirName+fileName; @@ -139,7 +150,16 @@ int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive) } // Type Lsast_directories numberOfFiles = numberOfFiles + tmpNumberOfFiles; - } // if + } // if recursive + if ( fileName != "." && fileName != ".." && !recursive ) + { + if ((bbGetInputType()==1) || (bbGetInputType()==2)) + { + std::string temp = dirName+fileName; + Filenames.push_back(temp); + numberOfFiles++; + } // Type All_directories + }// fileName && !recursive } else { // std::string temp = "\"" +dirName+fileName + "\""; std::string temp = dirName+fileName; @@ -232,7 +252,7 @@ int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive) } // Type files } // d_name } else if ( S_ISDIR(buf.st_mode) ) { //directory? - if ( d->d_name[0] != '.' && recursive ) //we also skip hidden files + if ( (d->d_name[0]!='.') && recursive ) //we also skip hidden files { if (bbGetInputType()==1) { @@ -240,14 +260,23 @@ int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive) numberOfFiles++; } // Type All_directories - tmpNumberOfFiles = Explore( fileName, recursive); + tmpNumberOfFiles = Explore( fileName, recursive, recursiveLevel-1); if ((bbGetInputType()==2)&&tmpNumberOfFiles==0) { Filenames.push_back(fileName); numberOfFiles++; } // Type Lsast_directories numberOfFiles = numberOfFiles+tmpNumberOfFiles; - } // d_name + }// d_name && recursive + if ( (d->d_name[0]!='.') && !recursive ) { //we also skip hidden files + if ((bbGetInputType()==1) || (bbGetInputType()==2)) + { + Filenames.push_back(fileName); + numberOfFiles++; + } // Type All_directories + + }// d_name && !recursive + } else { //gdcmErrorMacro( "Unexpected error" ); return -1; @@ -259,6 +288,7 @@ int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive) }// closedir #endif +} // if recursiveLevel return numberOfFiles; } @@ -268,9 +298,36 @@ int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive) void FilesFromDirectory::CleanFilenames( std::string basePath ) { std::string tmpString; - int i,ii,sizeFilenames = Filenames.size(); - - + int i,ii,sizeFilenames = Filenames.size(); + int j,sizeFileEnd = bbGetInputFileEnd().size(); + int okEraseElement; + int posStr; +//Selecting just the files in the FileEnd List + if (bbGetInputFileEnd().size()!=0) + { + for (i=sizeFilenames-1; i>=0; i--) + { + okEraseElement = 0; + for (j=0; j=0) + { + std::string tmp=Filenames[i].substr( posStr ) ; + if (bbGetInputFileEnd()[j].compare( tmp )==0 ) + { + okEraseElement++; + } // if FileEnd + }// if posStr + } // for j + + if (okEraseElement==0) + { + Filenames.erase( Filenames.begin()+i ); + } + } // for i + } // if FileEnd !=0 + sizeFilenames = Filenames.size(); // Cleanning paths with spaces for (i=0; i