]> 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 6e097ee1aa0a97815a22c0d0d6bbd6cbcc6c473e..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;
@@ -249,7 +255,7 @@ 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);   
@@ -277,6 +283,7 @@ int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive)
    }// closedir
 #endif
 
+} // if recursiveLevel 
 
        return numberOfFiles;
 }
@@ -286,24 +293,27 @@ 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 j,sizeFileEnd = bbGetInputFileEnd().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;
+                       okEraseElement = 0;
                        for (j=0; j<sizeFileEnd; j++)
                        {
-                               std::string tmp=Filenames[i].substr( (Filenames[i].length()) - (bbGetInputFileEnd()[j]).length() ) ;
-                               if (bbGetInputFileEnd()[j].compare( tmp )==0 )
+                               posStr=(Filenames[i].length()) - (bbGetInputFileEnd()[j]).length();
+                               if (posStr>=0)
                                {
-                                       okEraseElement++;
-                               } // if FileEnd
+                                       std::string tmp=Filenames[i].substr( posStr ) ;
+                                       if (bbGetInputFileEnd()[j].compare( tmp )==0 )
+                                       {
+                                               okEraseElement++;
+                                       } // if FileEnd
+                               }// if posStr
                        } // for j                                      
 
                        if (okEraseElement==0) 
@@ -312,14 +322,11 @@ void FilesFromDirectory::CleanFilenames( std::string basePath )
                        }
                } // for i      
        } // if FileEnd !=0
-
        sizeFilenames = Filenames.size();
-
 // Cleanning paths with spaces 
        for (i=0; i<sizeFilenames; i++)
        {
                tmpString=Filenames[i];
-
                std::string::size_type  spacePosition = tmpString.find_first_of(' ');
                if (spacePosition != std::string::npos)
                {
@@ -331,7 +338,6 @@ void FilesFromDirectory::CleanFilenames( std::string basePath )
                } // if spacePosition
        }
 
-
 // Alphabetical order  
        for (i=0; i<sizeFilenames; i++)
        {
@@ -345,14 +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
-
 }