2 //-----------------------------------------------------------------------------
3 #include "gdcmDirList.h"
8 #ifdef GDCM_NO_ANSI_STRING_STREAM
10 #define ostringstream ostrstream
23 //-----------------------------------------------------------------------------
24 const char gdcmDirList::SEPARATOR_X = '/';
25 const char gdcmDirList::SEPARATOR_WIN = '\\';
26 const std::string gdcmDirList::SEPARATOR = "/";
28 //-----------------------------------------------------------------------------
29 // Constructor / Destructor
31 * \ingroup gdcmDirList
36 gdcmDirList::gdcmDirList(std::string dirName,bool recursive)
41 Explore(name,recursive);
45 * \ingroup gdcmDirList
48 gdcmDirList::~gdcmDirList(void)
52 //-----------------------------------------------------------------------------
55 //-----------------------------------------------------------------------------
58 * \ingroup gdcmDirList
59 * \brief Get the directory name
60 * @return the directory name
62 std::string gdcmDirList::GetDirName(void)
67 //-----------------------------------------------------------------------------
70 //-----------------------------------------------------------------------------
73 * \ingroup gdcmDirList
74 * \brief Add a SEPARATOR to the end of the directory name is necessary
77 void gdcmDirList::NormalizePath(std::string &dirName)
79 int size=dirName.size();
80 if((dirName[size-1]!=SEPARATOR_X)&&(dirName[size-1]!=SEPARATOR_WIN))
87 * \ingroup gdcmDirList
88 * \brief Explore a directory with possibility of recursion
89 * @param dirName directory to explore
90 * @param recursive whether we want recursion or not
92 void gdcmDirList::Explore(std::string dirName,bool recursive)
96 NormalizePath(dirName);
99 WIN32_FIND_DATA fileData;
100 HANDLE hFile=FindFirstFile((dirName+"*").c_str(),&fileData);
103 while( (hFile!=INVALID_HANDLE_VALUE) && (found) )
105 fileName=fileData.cFileName;
106 if(fileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
108 if( (fileName!=".") && (fileName!="..") && (recursive) )
109 Explore(dirName+fileName,recursive);
113 this->push_back(dirName+fileName);
116 found=FindNextFile(hFile,&fileData);
120 struct dirent **namelist;
121 int n=scandir(dirName.c_str(), &namelist, 0, alphasort);
123 for (int i= 0;i < n; i++)
125 fileName=namelist[i]->d_name;
126 if(namelist[i]->d_type==DT_DIR)
128 if( (fileName!=".") && (fileName!="..") && (recursive) )
129 Explore(dirName+fileName,recursive);
133 this->push_back(dirName+fileName);
139 //-----------------------------------------------------------------------------