1 /*
2  * Copyright 2006-2008 The FLWOR Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ZORBA_FILE_H
18 #define ZORBA_FILE_H
19 
20 #ifndef WIN32
21 #include <stdint.h>
22 #endif
23 
24 #include <cstdio>
25 #include <string>
26 #include <time.h>
27 #include <vector>
28 
29 #include <zorba/config.h>
30 #include <zorba/file.h>
31 #include <zorba/util/path.h>
32 
33 namespace zorba {
34 
35 class ZORBA_DLL_PUBLIC file : public filesystem_path
36 {
37 public:
38 
39   enum filetype {
40     type_invalid,
41     type_non_existent,
42     type_directory,
43     type_link,
44     type_file,
45     type_volume,
46     type_other
47   };
48 
49   typedef zorba::File::FileSize_t file_size_t;
50 
51 protected:
52   filetype type;
53 
54 // file attributes
55   file_size_t size;          // size in bytes
56 
57   void do_stat();
58 
59 public:
60   file(const filesystem_path &path, int flags = 0);
61 
62 public: // common methods
set_path(std::string const & _path)63   void set_path(std::string const& _path ) { *((filesystem_path *) this) = _path; }
set_filetype(enum filetype _type)64   void set_filetype(enum filetype _type ) { type = _type ; }
65   enum filetype get_filetype();
66 
is_directory()67   bool is_directory() const { return (type==type_directory); }
is_file()68   bool is_file() const { return (type==type_file); }
is_link()69   bool is_link() const { return (type==type_link); }
is_volume()70   bool is_volume() const { return (type==type_volume); }
71 
is_invalid()72   bool is_invalid() const { return (type==type_invalid); }
exists()73   bool exists() const { return (type!=type_non_existent && type!=type_invalid); }
74 
75   time_t lastModified();
76 
77 public: // file methods
78   void create();
79   void remove(bool ignore = true);
80   void rename(std::string const& newpath);
81 
get_size()82   file_size_t get_size() const        { return size; }
83 
84 public: // directory methods
85   void mkdir();
86   void deep_mkdir();
87   void rmdir(bool ignore = true);
88   void lsdir(std::vector<std::string> &list);
89 #ifndef _WIN32_WCE
90   void chdir();
91 #endif
92 
is_empty()93   bool is_empty() const { return (size == (file_size_t)0); }
94 };
95 
96 
97 } // namespace zorba
98 #endif /* ZORBA_FILE_H */
99 /*
100  * Local variables:
101  * mode: c++
102  * End:
103  */
104 /* vim:set et sw=2 ts=2: */
105