X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fstd%2Fsrc%2FbbstdFilesFromDirectory.cxx;h=6e097ee1aa0a97815a22c0d0d6bbd6cbcc6c473e;hb=3b9566ad04e2a5cb0891b752fa48fd59631387ac;hp=1aefdb16e4005719a68219f62bb9b1cf6b79fb1e;hpb=899e84df04040566381e7252faa0b47d0863baca;p=bbtk.git diff --git a/packages/std/src/bbstdFilesFromDirectory.cxx b/packages/std/src/bbstdFilesFromDirectory.cxx index 1aefdb1..6e097ee 100644 --- a/packages/std/src/bbstdFilesFromDirectory.cxx +++ b/packages/std/src/bbstdFilesFromDirectory.cxx @@ -48,9 +48,10 @@ BBTK_BLACK_BOX_IMPLEMENTATION(FilesFromDirectory,bbtk::AtomicBlackBox); void FilesFromDirectory::Process() { Filenames.clear(); + SimpleFilenames.clear(); DirName = bbGetInputIn(); bool rec = bbGetInputRecursive(); - /*int nbFiles = */ Explore(DirName, rec); + /*int nbFiles = */ Explore(DirName, rec); CleanFilenames( bbGetInputIn() ); bbSetOutputOut(Filenames); bbSetOutputOutSimple(SimpleFilenames); @@ -113,7 +114,6 @@ int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive) //assert( dirName[dirName.size()-1] == '' ); HANDLE hFile = FindFirstFile((dirName+"*").c_str(), &fileData); - for(BOOL b = (hFile != INVALID_HANDLE_VALUE); b; b = FindNextFile(hFile, &fileData)) { @@ -125,19 +125,30 @@ int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive) { if (bbGetInputType()==1) { - Filenames.push_back(fileName); - numberOfFiles++; + std::string temp = dirName+fileName; + Filenames.push_back(temp); + numberOfFiles++; } // Type ALL_directories tmpNumberOfFiles = Explore(dirName+fileName, recursive); if ((bbGetInputType()==2)&&tmpNumberOfFiles==0) { - Filenames.push_back(fileName); + std::string temp = dirName+fileName; + Filenames.push_back(temp); numberOfFiles++; } // 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; @@ -186,7 +197,7 @@ int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive) // Real POSIX implementation: scandir is a BSD extension only, and doesn't // work on debian for example - DIR* dir = opendir(dirName.c_str()); + DIR* dir = opendir( dirName.c_str() ); if (!dir) { return 0; @@ -230,7 +241,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) { @@ -245,7 +256,16 @@ int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive) 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; @@ -267,11 +287,39 @@ void FilesFromDirectory::CleanFilenames( std::string basePath ) { std::string tmpString; int i,ii,sizeFilenames = Filenames.size(); + int j,sizeFileEnd = bbGetInputFileEnd().size(); + + int okEraseElement; + +//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