vul_file.h
Go to the documentation of this file.
1 // This is core/vul/vul_file.h
2 #ifndef vul_file_h_
3 #define vul_file_h_
4 //:
5 // \file
6 // \brief A collection of miscellaneous filesystem-type utilities
7 // \author Andrew W. Fitzgibbon, Oxford RRG
8 // \date 02 Nov 98
9 //
10 // \verbatim
11 // Modifications
12 // 981102 AWF Initial version.
13 // PDA (Manchester) 21/03/2001: Tidied up the documentation
14 // Feb.2002 - Peter Vanroose - brief doxygen comment placed on single line
15 // Jun.2003 - Ian Scott - added support for '\' file separator to dos version
16 // \endverbatim
17 
18 #include <string>
19 #include <ctime>
20 #ifdef _MSC_VER
21 # include <vcl_msvc_warnings.h>
22 #endif
23 #include <vxl_config.h>
24 //: A collection of miscellaneous filesystem-type utilities
25 //
26 struct vul_file
27 {
28  //: Return current working directory
29  static std::string get_cwd();
30 
31  //: change current working directory
32  static bool change_directory(char const* dirname);
33  static bool change_directory(std::string const& dirname) {
34  return change_directory(dirname.c_str());
35  }
36 
37  //: Make a writable directory.
38  // You might imagine mkdir would be a better name,
39  // and then you might imagine a world w/out ms.
40  static bool make_directory(char const* filename);
41  static bool make_directory(std::string const& filename) {
42  return make_directory(filename.c_str());
43  }
44 
45  //: Make a writable directory, including any necessary parents.
46  // Returns true if successful, or if the directory already exists.
47  static bool make_directory_path(char const* filename);
48  static bool make_directory_path(std::string const& filename) {
49  return make_directory_path(filename.c_str());
50  }
51 
52  //: Return true iff filename is a directory.
53  static bool is_directory(char const* filename);
54  static bool is_directory(const std::string& filename) {
55  return is_directory(filename.c_str());
56  }
57 
58 #if defined(_WIN32) && !defined(__CYGWIN__)
59  //: Return true iff filename is a drive, e.g., "c:" or "Z:".
60  static bool is_drive(char const* filename);
61  static bool is_drive(const std::string& filename) {
62  return is_drive(filename.c_str());
63  }
64 #endif
65 
66  //: Expand any leading ~ escapes in filename
67  static std::string expand_tilde(char const* filename);
68  static std::string expand_tilde(std::string const& filename) {
69  return expand_tilde(filename.c_str());
70  }
71 
72  //: Return true iff filename exists. It may be any sort of file.
73  static bool exists(char const* filename);
74  static bool exists(std::string const& filename) {
75  return exists(filename.c_str());
76  }
77 
78  //: Return size of vul_file
79  static unsigned long size(char const* filename);
80  static unsigned long size(std::string filename) { return size(filename.c_str()); }
81 
82  //: Return dirname
83  static std::string dirname(char const* filename);
84  static std::string dirname(std::string const& filename) {
85  return dirname(filename.c_str());
86  }
87 
88  //: Return extension (including the '.').
89  static std::string extension(char const* filename);
90  static std::string extension(std::string const& filename) {
91  return extension( filename.c_str() );
92  }
93 
94  //: Return basename
95  // Only strip specified suffix.
96  static std::string basename(char const* filename, char const* suffix = nullptr);
97  static std::string basename(std::string const& filename, char const* suffix = nullptr) {
98  return basename(filename.c_str(), suffix );
99  }
100 
101  //: Strips away directory of the filename
102  static std::string strip_directory(char const* filename);
103  static std::string strip_directory(std::string const &filename)
104  { return strip_directory(filename.c_str()); }
105 
106  //: Strips away extension of the filename
107  static std::string strip_extension(char const* filename);
108  static std::string strip_extension(std::string const &filename)
109  { return strip_extension(filename.c_str()); }
110 
111  //: Delete 1 or more files using the Local OS preferred globbing.
112  // E.g. \c delete_file_glob("*"); will delete all the files in the
113  // current directory on most operating systems.
114  // \return true if successful.
115  static bool delete_file_glob(std::string const& file_glob);
116  static bool delete_file_glob(char const* file_glob)
117  { return delete_file_glob(std::string(file_glob)); }
118 
119 
120 #if defined(_WIN32) && VXL_USE_WIN_WCHAR_T
121 
122  //: Return current working directory
123  // This function is provided as an overloading
124  static std::string get_cwd(char* /*dummy*/)
125  { return get_cwd(); }
126 
127  //: Return current working directory
128  static std::wstring get_cwd(wchar_t* dummy);
129 
130  //: change current working directory
131  static bool change_directory(wchar_t const* dirname);
132  static bool change_directory(std::wstring const& dirname) {
133  return change_directory(dirname.c_str());
134  }
135 
136  //: Make a writable directory.
137  // You might imagine mkdir would be a better name,
138  // and then you might imagine a world w/out ms.
139  static bool make_directory(wchar_t const* filename);
140  static bool make_directory(std::wstring const& filename) {
141  return make_directory(filename.c_str());
142  }
143 
144  //: Make a writable directory, including any necessary parents.
145  // Returns true if successful, or if the directory already exists.
146  static bool make_directory_path(wchar_t const* filename);
147  static bool make_directory_path(std::wstring const& filename) {
148  return make_directory_path(filename.c_str());
149  }
150 
151  //: Return true iff filename is a directory.
152  static bool is_directory(wchar_t const* filename);
153  static bool is_directory(const std::wstring& filename) {
154  return is_directory(filename.c_str());
155  }
156 
157  //: Return true iff filename is a drive, e.g., "c:" or "Z:".
158  static bool is_drive(wchar_t const* filename);
159  static bool is_drive(const std::wstring& filename) {
160  return is_drive(filename.c_str());
161  }
162 
163  ////: Expand any leading ~ escapes in filename
164  static std::wstring expand_tilde(wchar_t const* filename) {
165  // ~ meaningless on win32
166  return std::wstring(filename);
167  }
168  static std::wstring expand_tilde(std::wstring const& filename) {
169  // ~ meaningless on win32
170  return filename;
171  }
172 
173  //: Return true iff filename exists. It may be any sort of file.
174  static bool exists(wchar_t const* filename);
175  static bool exists(std::wstring const& filename) {
176  return exists(filename.c_str());
177  }
178 
179  ////: Return size of vul_file
180  //static unsigned long size(wchar_t const* filename);
181  //static unsigned long size(std::wstring filename) { return size(filename.c_str()); }
182 
183  //: Return dirname
184  static std::wstring dirname(wchar_t const* filename);
185  static std::wstring dirname(std::wstring const& filename) {
186  return dirname(filename.c_str());
187  }
188 
189  //: Return extension (including the '.').
190  static std::wstring extension(wchar_t const* filename);
191  static std::wstring extension(std::wstring const& filename) {
192  return extension( filename.c_str() );
193  }
194 
195  //: Return basename
196  static std::wstring basename(wchar_t const* filename, wchar_t const* suffix = 0);
197  static std::wstring basename(std::wstring const& filename, wchar_t const* suffix = 0) {
198  return basename(filename.c_str(), suffix );
199  }
200 
201  //: Strips away directory of the filename
202  static std::wstring strip_directory(wchar_t const* filename);
203  static std::wstring strip_directory(std::wstring const &filename)
204  { return strip_directory(filename.c_str()); }
205 
206  //: Strips away extension of the filename
207  static std::wstring strip_extension(wchar_t const* filename);
208  static std::wstring strip_extension(std::wstring const &filename)
209  { return strip_extension(filename.c_str()); }
210 
211 #endif
212 
213  static std::time_t time_modified(char const* filename);
214  static std::time_t time_modified(std::string const& filename) {
215  return time_modified(filename.c_str());
216  }
217 
218 };
219 
220 inline bool vul_file_exists(char const *f) { return vul_file::exists(f); }
221 inline bool vul_file_exists(std::string f) { return vul_file::exists(f); }
222 
223 inline bool vul_file_is_directory(char const *f) { return vul_file::is_directory(f); }
224 inline bool vul_file_is_directory(std::string f) { return vul_file::is_directory(f); }
225 
226 inline unsigned long vul_file_size(char const *f) { return vul_file::size(f); }
227 inline unsigned long vul_file_size(std::string f) { return vul_file::size(f); }
228 
229 inline std::string vul_file_extension(char const *f) { return vul_file::extension(f); }
230 inline std::string vul_file_extension(std::string f) { return vul_file_extension(f.c_str()); }
231 
232 #endif // vul_file_h_
static bool delete_file_glob(char const *file_glob)
Definition: vul_file.h:116
static std::string basename(std::string const &filename, char const *suffix=nullptr)
Definition: vul_file.h:97
static std::string extension(char const *filename)
Return extension (including the '.
Definition: vul_file.cxx:140
static std::string basename(char const *filename, char const *suffix=nullptr)
Return basename.
Definition: vul_file.cxx:177
unsigned long vul_file_size(char const *f)
Definition: vul_file.h:226
static bool delete_file_glob(std::string const &file_glob)
Delete 1 or more files using the Local OS preferred globbing.
Definition: vul_file.cxx:221
static bool is_directory(const std::string &filename)
Definition: vul_file.h:54
static bool make_directory_path(char const *filename)
Make a writable directory, including any necessary parents.
Definition: vul_file.cxx:83
bool vul_file_exists(char const *f)
Definition: vul_file.h:220
bool vul_file_is_directory(char const *f)
Definition: vul_file.h:223
static std::string strip_directory(char const *filename)
Strips away directory of the filename.
Definition: vul_file.cxx:151
static bool change_directory(char const *dirname)
change current working directory.
Definition: vul_file.cxx:41
static std::string expand_tilde(char const *filename)
Expand any leading ~ escapes in filename.
Definition: vul_file.cxx:234
A collection of miscellaneous filesystem-type utilities.
Definition: vul_file.h:26
static unsigned long size(char const *filename)
Return size of vul_file.
Definition: vul_file.cxx:99
static bool is_directory(char const *filename)
Return true iff filename is a directory.
Definition: vul_file.cxx:55
static std::string strip_directory(std::string const &filename)
Definition: vul_file.h:103
static std::string get_cwd()
Return current working directory.
Definition: vul_file.cxx:31
std::string vul_file_extension(char const *f)
Definition: vul_file.h:229
static std::string strip_extension(char const *filename)
Strips away extension of the filename.
Definition: vul_file.cxx:166
static std::time_t time_modified(std::string const &filename)
Definition: vul_file.h:214
static std::string extension(std::string const &filename)
Definition: vul_file.h:90
static unsigned long size(std::string filename)
Definition: vul_file.h:80
static bool make_directory(std::string const &filename)
Definition: vul_file.h:41
static bool make_directory(char const *filename)
Make a writable directory.
Definition: vul_file.cxx:46
static bool change_directory(std::string const &dirname)
Definition: vul_file.h:33
static std::time_t time_modified(char const *filename)
Definition: vul_file.cxx:62
static std::string strip_extension(std::string const &filename)
Definition: vul_file.h:108
static bool exists(char const *filename)
Return true iff filename exists. It may be any sort of file.
Definition: vul_file.cxx:108
static bool make_directory_path(std::string const &filename)
Definition: vul_file.h:48
static std::string dirname(char const *filename)
Return dirname.
Definition: vul_file.cxx:124
static std::string expand_tilde(std::string const &filename)
Definition: vul_file.h:68
static std::string dirname(std::string const &filename)
Definition: vul_file.h:84
static bool exists(std::string const &filename)
Definition: vul_file.h:74