]> Creatis software - bbtk.git/blobdiff - packages/std/src/bbstdFilesFromDirectory.cxx
#3385 BBTK Bug New Normal - box FilesFromDirectory CreateImage InvertCrop ComboBox...
[bbtk.git] / packages / std / src / bbstdFilesFromDirectory.cxx
index 61fb34c9c5a4e6a2b4bd93446c9367faa5a7e6d7..387b5ad77aacfd7a2043b9048daed5491c20cdec 100644 (file)
@@ -49,10 +49,12 @@ void FilesFromDirectory::Process()
 {
        Filenames.clear();
        SimpleFilenames.clear();
-       DirName         = bbGetInputIn();
-       bool rec        = bbGetInputRecursive();
-       /*int nbFiles = */ Explore(DirName, rec);
-       CleanFilenames( bbGetInputIn() );
+       if (bbGetInputIn()!="")
+       {
+               DirName         = bbGetInputIn();
+               /*int nbFiles = */ Explore(DirName, bbGetInputRecursive(), bbGetInputRecursiveLevel() );
+               CleanFilenames( DirName );
+       } // if In
        bbSetOutputOut(Filenames);   
        bbSetOutputOutSimple(SimpleFilenames);   
 }
@@ -62,6 +64,7 @@ void FilesFromDirectory::bbUserSetDefaultValues()
     bbSetInputIn(".");
     bbSetInputRecursive(false);  
     bbSetInputType(0);  
+    bbSetInputRecursiveLevel(999);  
 }
 
 void FilesFromDirectory::bbUserInitializeProcessing() 
@@ -87,7 +90,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 +106,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 +136,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 +145,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 +247,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 +255,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 +283,7 @@ int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive)
    }// closedir
 #endif
 
+} // if recursiveLevel 
 
        return numberOfFiles;
 }
@@ -268,9 +293,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<sizeFileEnd; j++)
+                       {
+                               posStr=(Filenames[i].length()) - (bbGetInputFileEnd()[j]).length();
+                               if (posStr>=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<sizeFilenames; i++)
        {
@@ -299,15 +351,12 @@ void FilesFromDirectory::CleanFilenames( std::string basePath )
                } // if 
        } // for ii
        } // for i
-
 // Creating SimpleFilenames
        unsigned int lenghtBasePath = basePath.length();
        for (i=0; i<sizeFilenames; i++)
        {
-
                SimpleFilenames.push_back( Filenames[i].substr( lenghtBasePath ) );
        } // for i
-
 }