fileinfo.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2006-2008 Marc Boris Duerner
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * As a special exception, you may use this file as part of a free
10  * software library without restriction. Specifically, if other files
11  * instantiate templates or use macros or inline functions from this
12  * file, or you compile this file and link it with other files to
13  * produce an executable, this file does not by itself cause the
14  * resulting executable to be covered by the GNU General Public
15  * License. This exception does not however invalidate any other
16  * reasons why the executable file might be covered by the GNU Library
17  * General Public License.
18  *
19  * This library is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22  * Lesser General Public License for more details.
23  *
24  * You should have received a copy of the GNU Lesser General Public
25  * License along with this library; if not, write to the Free Software
26  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27  */
28 #ifndef CXXTOOLS_FILEINFO_H
29 #define CXXTOOLS_FILEINFO_H
30 
31 #include <string>
32 
33 namespace cxxtools
34 {
35 
36 class DirectoryIterator;
37 
40 class FileInfo
41 {
42  public:
44  enum Type
45  {
46  Invalid = 0,
47  Directory = 1,
48  File = 2,
49  Chardev = 3,
50  Blockdev = 4,
51  Fifo = 5,
52  Symlink = 6
53  };
54 
55  public:
57  FileInfo();
58 
61  explicit FileInfo(const std::string& path);
62 
63  explicit FileInfo(const DirectoryIterator& it);
64 
66  FileInfo(const FileInfo& fi);
67 
69  ~FileInfo();
70 
72  FileInfo& operator=(const FileInfo& fi);
73 
75  Type type() const;
76 
77  const std::string& path() const;
78 
84  std::string name() const;
85 
94  std::string dirName() const;
95 
97  std::size_t size() const;
98 
100  bool isDirectory() const
101  {
102  return _type == FileInfo::Directory;
103  }
104 
106  bool isFile() const
107  {
108  return _type == FileInfo::File;
109  }
110 
115  void remove();
116 
122  void move(const std::string& to);
123 
124  public:
126  static bool exists(const std::string& path);
127 
129  static Type getType(const std::string& path);
130 
131  private:
133  Type _type;
134 
136  std::string _path;
137 };
138 
139 inline bool operator<(const FileInfo& a, const FileInfo& b)
140 {
141  return a.path() < b.path();
142 }
143 
144 inline bool operator==(const FileInfo& a, const FileInfo& b)
145 {
146  return a.path() == b.path();
147 }
148 
149 inline bool operator!=(const FileInfo& a, const FileInfo& b)
150 {
151  return !(a == b);
152 }
153 
154 } // namespace cxxtools
155 
156 #endif