Commit f28202b15e567f7e19f00496e551da079e7e6148
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. |