]> Creatis software - bbtk.git/blobdiff - packages/std/src/bbstdFilesFromDirectory.cxx
#2816 BBTK Bug New Normal - std FilesFromDirectory box not clean the list for the...
[bbtk.git] / packages / std / src / bbstdFilesFromDirectory.cxx
index d7c747e660d7e3638f77a9a100168d92c12dcceb..fc271c23591dd14977a420714323bd855561b9d4 100644 (file)
@@ -1,5 +1,33 @@
+/*
+ # ---------------------------------------------------------------------
+ #
+ # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+ #                        pour la SantÈ)
+ # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+ # Previous Authors : Laurent Guigues, Jean-Pierre Roux
+ # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+ #
+ #  This software is governed by the CeCILL-B license under French law and
+ #  abiding by the rules of distribution of free software. You can  use,
+ #  modify and/ or redistribute the software under the terms of the CeCILL-B
+ #  license as circulated by CEA, CNRS and INRIA at the following URL
+ #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ #  or in the file LICENSE.txt.
+ #
+ #  As a counterpart to the access to the source code and  rights to copy,
+ #  modify and redistribute granted by the license, users are provided only
+ #  with a limited warranty  and the software's author,  the holder of the
+ #  economic rights,  and the successive licensors  have only  limited
+ #  liability.
+ #
+ #  The fact that you are presently reading this means that you have had
+ #  knowledge of the CeCILL-B license and that you accept its terms.
+ # ------------------------------------------------------------------------ */
+
+
 #include "bbstdFilesFromDirectory.h"
 #include "bbstdPackage.h"
+#include <string>
 
 #ifdef _MSC_VER
    #include <windows.h>
@@ -19,32 +47,29 @@ BBTK_BLACK_BOX_IMPLEMENTATION(FilesFromDirectory,bbtk::AtomicBlackBox);
 
 void FilesFromDirectory::Process()
 {
-
    DirName = bbGetInputIn();
    bool rec = bbGetInputRecursive();
    /*int nbFiles = */ Explore(DirName, rec);
-   bbSetOutputOut(Filenames);
+   bbSetOutputOut(Filenames);   
    
-  
+//  for (int i=0; i<Filenames.size(); i++)
+//     std::cout << "Filenames [" << i << "] = [" << Filenames[i] << "]" << std::endl;  
 }
-void FilesFromDirectory::bbUserConstructor()
-{
 
+void FilesFromDirectory::bbUserSetDefaultValues()
+{
     bbSetInputIn(".");
-    bbSetInputRecursive(false);
-  
+    bbSetInputRecursive(false);  
 }
-void FilesFromDirectory::bbUserCopyConstructor(bbtk::BlackBox::Pointer)
-{
 
-  
+void FilesFromDirectory::bbUserInitializeProcessing() 
+{ 
 }
-void FilesFromDirectory::bbUserDestructor()
-{
 
-  
+void FilesFromDirectory::bbUserFinalizeProcessing() 
+{
 }
-
+  
 /**
  * \brief   Add a SEPARATOR to the end of the name if necessary
  * @param   pathname file/directory name to normalize 
@@ -52,7 +77,7 @@ void FilesFromDirectory::bbUserDestructor()
 std::string FilesFromDirectory::NormalizePath(std::string const &pathname)
 {
 #ifdef _WIN32
-   const char FILESEPARATOR = '\\;
+   const char FILESEPARATOR = '\\';
 #else
    const char FILESEPARATOR = '/';
 #endif
@@ -75,6 +100,7 @@ std::string FilesFromDirectory::NormalizePath(std::string const &pathname)
  */
 int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive)
 {
+   Filenames.clear();
    int numberOfFiles = 0;
    std::string fileName;
    std::string dirName = NormalizePath(dirpath);
@@ -92,12 +118,22 @@ int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive)
          // Need to check for . and .. to avoid infinite loop
          if ( fileName != "." && fileName != ".." && recursive )
          {
-            numberOfFiles += Explore(dirName+fileName,recursive);
+            numberOfFiles += Explore(dirName+fileName, recursive);
          }
       }
       else
       {
-         Filenames.push_back(dirName+fileName);
+//         std::string temp = "\"" +dirName+fileName + "\"";
+         std::string temp = dirName+fileName;
+         std::string::size_type spacePosition = temp.find_first_of(' ');
+                if (spacePosition != std::string::npos) 
+        {
+   std::cout << "=========================================== File name : [" <<temp << 
+              "] contains space(s); Discarted !" << std::endl;
+           temp.insert(spacePosition, "\\");
+   continue;  /// \TODO : fix the trouble (vtk?)
+        }      
+         Filenames.push_back(temp);
          numberOfFiles++;
       }
    }
@@ -139,14 +175,27 @@ int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive)
    for (d = readdir(dir); d; d = readdir(dir))
    {
       fileName = dirName + d->d_name;
+      std::string temp = fileName;
       if( stat(fileName.c_str(), &buf) != 0 )
       {
          //gdcmErrorMacro( strerror(errno) );
       }
       if ( S_ISREG(buf.st_mode) )    //is it a regular file?
       {
-         Filenames.push_back( fileName );
-         numberOfFiles++;
+         if ( d->d_name[0]!='.')
+         {
+        
+             std::string::size_type /* long int */ spacePosition = temp.find_first_of(' ');
+             if (spacePosition != std::string::npos)
+            {
+   std::cout << "=========================================== File name : [" <<temp << 
+              "] contains space(s); Discarted !" << std::endl;
+                 temp.insert(spacePosition, "\\");
+   continue;   /// \TODO : fix the trouble (vtk?)
+             }
+             Filenames.push_back(temp);         
+             numberOfFiles++;
+         }
       }
       else if ( S_ISDIR(buf.st_mode) ) //directory?
       {
@@ -167,6 +216,21 @@ int FilesFromDirectory::Explore(std::string const &dirpath, bool recursive)
    }
 #endif
 
+  std::string tmpString;
+  int i,ii,sizeFilenames = Filenames.size();
+  for (i=0; i<sizeFilenames; i++)
+  {
+    for (ii=i; ii<sizeFilenames; ii++)
+    {
+       if (Filenames[i]>Filenames[ii]) 
+        {
+          tmpString=Filenames[i];
+          Filenames[i]=Filenames[ii];
+          Filenames[ii]=tmpString;
+        } // if 
+    } // for ii
+  } // for i
+
   return numberOfFiles;
 }