Commit f28202b15e567f7e19f00496e551da079e7e6148

Authored by David Mayerich
1 parent f92397d2

fixed OS interop problems with filename

Showing 1 changed file with 13 additions and 14 deletions   Show diff stats
stim/parser/filename.h
@@ -43,18 +43,13 @@ protected: @@ -43,18 +43,13 @@ protected:
43 43
44 bool absolute; //filename is an absolute path 44 bool absolute; //filename is an absolute path
45 45
46 - //replace any incorrect dividers with the appropriate version for the OS  
47 - std::string parse_div(std::string s) {  
48 - #ifdef _WIN32  
49 - std::replace( s.begin(), s.end(), '/', '\\');  
50 - #else  
51 - std::replace( s.begin(), s.end(), '\\', '/');  
52 - #endif  
53 - 46 + //replaces win32 dividers with the Linux standard
  47 + std::string unix_div(std::string s) {
  48 + std::replace( s.begin(), s.end(), '\\', '/');
54 return s; 49 return s;
55 } 50 }
56 51
57 - //parse the file name (prefix and extension) 52 + //break up a filename into a prefix and extension
58 void parse_name(std::string fname){ 53 void parse_name(std::string fname){
59 54
60 //find the extension 55 //find the extension
@@ -70,6 +65,8 @@ protected: @@ -70,6 +65,8 @@ protected:
70 //parse a file locator string 65 //parse a file locator string
71 void parse(std::string loc){ 66 void parse(std::string loc){
72 67
  68 + loc = unix_div(loc);
  69 +
73 //determine the drive (if Windows) 70 //determine the drive (if Windows)
74 drive = ""; 71 drive = "";
75 #ifdef _WIN32 72 #ifdef _WIN32
@@ -87,14 +84,14 @@ protected: @@ -87,14 +84,14 @@ protected:
87 #endif 84 #endif
88 85
89 //determine the file name 86 //determine the file name
90 - std::string fname = loc.substr( loc.find_last_of(STIM_FILENAME_DIV) + 1 ); //find the file name (including extension) 87 + std::string fname = loc.substr( loc.find_last_of('/') + 1 ); //find the file name (including extension)
91 88
92 //parse the file name 89 //parse the file name
93 parse_name(fname); 90 parse_name(fname);
94 91
95 //find the directory hierarchy 92 //find the directory hierarchy
96 - std::string dir = loc.substr(0, loc.find_last_of(STIM_FILENAME_DIV) + 1 );  
97 - path = stim::parser::split(dir, STIM_FILENAME_DIV); 93 + std::string dir = loc.substr(0, loc.find_last_of('/') + 1 );
  94 + path = stim::parser::split(dir, '/');
98 } 95 }
99 96
100 public: 97 public:
@@ -210,6 +207,7 @@ public: @@ -210,6 +207,7 @@ public:
210 207
211 //stim::filename file_path; 208 //stim::filename file_path;
212 stim::filename filepath(dir_fname()); 209 stim::filename filepath(dir_fname());
  210 +
213 HANDLE hFind = INVALID_HANDLE_VALUE; 211 HANDLE hFind = INVALID_HANDLE_VALUE;
214 WIN32_FIND_DATAA FindFileData; 212 WIN32_FIND_DATAA FindFileData;
215 std::vector<stim::filename> file_list; 213 std::vector<stim::filename> file_list;
@@ -220,8 +218,9 @@ public: @@ -220,8 +218,9 @@ public:
220 printf ("Invalid file handle. Error is %u.\n", GetLastError()); 218 printf ("Invalid file handle. Error is %u.\n", GetLastError());
221 } 219 }
222 else { 220 else {
223 - std::string file_name = FindFileData.cFileName;  
224 - stim::filename current_file(f_name(file_name)); 221 + std::string file_name = FindFileData.cFileName; //get the file name
  222 + std::string file_path = dir();
  223 + stim::filename current_file(file_path + file_name);
225 file_list.push_back(current_file); 224 file_list.push_back(current_file);
226 225
227 // List all the other files in the directory. 226 // List all the other files in the directory.