void FilesFromDirectory::Process()
{
-printf("EED FilesFromDirectory::Process Start\n");
-
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);
-
-printf("EED FilesFromDirectory::Process End\n");
}
void FilesFromDirectory::bbUserSetDefaultValues()
bbSetInputIn(".");
bbSetInputRecursive(false);
bbSetInputType(0);
+ bbSetInputRecursiveLevel(999);
}
void FilesFromDirectory::bbUserInitializeProcessing()
std::string name = pathname;
int size = name.size();
- if ( name[size-1] != FILESEPARATOR )
+ if (!((name[size-1]=='/')||(name[size-1]=='\\')))
{
name += FILESEPARATOR;
}
-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;
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;
} // 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;
} // 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)
{
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;
}// closedir
#endif
+} // if recursiveLevel
return numberOfFiles;
}
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)
}
} // 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)
{
} // if spacePosition
}
-
// Alphabetical order
for (i=0; i<sizeFilenames; i++)
{
} // 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
-
}