+class Stat
+{
+private:
+ struct Private;
+
+ struct OwnerInfo
+ {
+ std::string owner;
+ std::string group;
+ };
+
+ bool exists;
+ FileType type;
+ FileSize size;
+ FileSize alloc_size;
+ Time::TimeStamp mtime;
+ mutable OwnerInfo owner_info;
+ Private *priv;
+
+public:
+ Stat();
+ Stat(const Stat &);
+ Stat &operator=(const Stat &);
+ ~Stat();
+
+ FileType get_type() const { return type; }
+ bool is_regular() const { return type==REGULAR; }
+ bool is_directory() const { return type==DIRECTORY; }
+ bool is_symlink() const { return type==SYMLINK; }
+ FileSize get_size() const { return size; }
+ FileSize get_alloc_size() const { return alloc_size; }
+ const Time::TimeStamp &get_modify_time() const { return mtime; }
+ const std::string &get_owner() const;
+ const std::string &get_group() const;
+
+ operator bool() const { return exists; }
+
+ /// Returns a Stat object describing a file.
+ static Stat stat(const Path &);
+ static Stat lstat(const Path &);
+};