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
35 gdcmDirList::gdcmDirList(std::string dirName,bool recursive)
40 Explore(name,recursive);
44 * \ingroup gdcmDirList
48 gdcmDirList::~gdcmDirList(void)
52 //-----------------------------------------------------------------------------
55 //-----------------------------------------------------------------------------
58 * \ingroup gdcmDirList
59 * \brief Get 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
91 void gdcmDirList::Explore(std::string dirName,bool recursive)
95 NormalizePath(dirName);
98 WIN32_FIND_DATA fileData;
99 HANDLE hFile=FindFirstFile((dirName+"*").c_str(),&fileData);
102 while( (hFile!=INVALID_HANDLE_VALUE) && (found) )
104 fileName=fileData.cFileName;
105 if(fileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
107 if( (fileName!=".") && (fileName!="..") && (recursive) )
108 Explore(dirName+fileName);
112 this->push_back(dirName+fileName);
115 found=FindNextFile(hFile,&fileData);
119 struct dirent **namelist;
120 int n=scandir(dirName.c_str(), &namelist, 0, alphasort);
122 for (int i= 0;i < n; i++)
124 fileName=namelist[i]->d_name;
125 if(namelist[i]->d_type==DT_DIR)
127 if( (fileName!=".") && (fileName!="..") && (recursive) )
128 Explore(dirName+fileName);
132 this->push_back(dirName+fileName);
138 //-----------------------------------------------------------------------------