00001
00002
00003 #include <windows.h>
00004 #include <sys/stat.h>
00005 #include <sys/types.h>
00006 #include <sys/stat.h>
00007
00008 namespace dynamic
00009 {
00010 const int dir_separator = '\\';
00011
00012 class win32_filesystem_api
00013 {
00014 public:
00015 static int dir_separator() { return '\\'; }
00016
00017 struct dir_iterator
00018 {
00019 HANDLE find_handle;
00020 WIN32_FIND_DATAA find_data;
00021 dir_iterator() : find_handle(INVALID_HANDLE_VALUE) { }
00022 ~dir_iterator() { FindClose(find_handle); }
00023 };
00024
00025 static bool first_file(std::string name, dir_iterator & data)
00026 {
00027 name += "\\*";
00028 data.find_handle = FindFirstFileA(name.c_str(), &data.find_data);
00029 return data.find_handle != INVALID_HANDLE_VALUE;
00030 }
00031
00032 static bool find_next(dir_iterator & data)
00033 {
00034 return FindNextFileA(data.find_handle, &data.find_data)!=0;
00035 }
00036
00037 static const char * get_filename(const dir_iterator & data)
00038 {
00039 return data.find_data.cFileName;
00040 }
00041
00042 static bool is_directory(const dir_iterator & data, std::string const & filename)
00043 {
00044 return (data.find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)!=0;
00045 }
00046
00047 static bool is_directory(std::string const & filename)
00048 {
00049 struct stat mstat;
00050 return stat(filename.c_str(), &mstat) == 0 && (mstat.st_mode & _S_IFDIR);
00051 }
00052 };
00053
00054 typedef win32_filesystem_api filesystem_api;
00055 }