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  Socket = 7
54  };
55 
56  public:
58  FileInfo();
59 
62  explicit FileInfo(const std::string& path);
63 
64  explicit FileInfo(const DirectoryIterator& it);
65 
67  FileInfo(const FileInfo& fi);
68 
70  ~FileInfo();
71 
73  FileInfo& operator=(const FileInfo& fi);
74 
76  Type type() const;
77 
78  const std::string& path() const;
79 
85  std::string name() const;
86 
95  std::string dirName() const;
96 
98  std::size_t size() const;
99 
101  bool isDirectory() const
102  {
103  return _type == FileInfo::Directory;
104  }
105 
107  bool isFile() const
108  {
109  return _type == FileInfo::File;
110  }
111 
116  void remove();
117 
123  void move(const std::string& to);
124 
125  public:
127  static bool exists(const std::string& path);
128 
130  static Type getType(const std::string& path);
131 
132  private:
134  Type _type;
135 
137  std::string _path;
138 };
139 
140 inline bool operator<(const FileInfo& a, const FileInfo& b)
141 {
142  return a.path() < b.path();
143 }
144 
145 inline bool operator==(const FileInfo& a, const FileInfo& b)
146 {
147  return a.path() == b.path();
148 }
149 
150 inline bool operator!=(const FileInfo& a, const FileInfo& b)
151 {
152  return !(a == b);
153 }
154 
155 } // namespace cxxtools
156 
157 #endif