1/*
2 *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef _WEBRTC_BASE_WIN32FILESYSTEM_H__
12#define _WEBRTC_BASE_WIN32FILESYSTEM_H__
13
14#include "fileutils.h"
15
16namespace rtc {
17
18class Win32Filesystem : public FilesystemInterface {
19 public:
20  // Opens a file. Returns an open StreamInterface if function succeeds. Otherwise,
21  // returns NULL.
22  virtual FileStream *OpenFile(const Pathname &filename,
23                               const std::string &mode);
24
25  // Atomically creates an empty file accessible only to the current user if one
26  // does not already exist at the given path, otherwise fails.
27  virtual bool CreatePrivateFile(const Pathname &filename);
28
29  // This will attempt to delete the path located at filename.
30  // If the path points to a folder, it will fail with VERIFY
31  virtual bool DeleteFile(const Pathname &filename);
32
33  // This will attempt to delete an empty folder. If the path does not point to
34  // a folder, it fails with VERIFY. If the folder is not empty, it fails normally
35  virtual bool DeleteEmptyFolder(const Pathname &folder);
36
37  // Creates a directory. This will call itself recursively to create /foo/bar even if
38  // /foo does not exist.
39  // Returns TRUE if function succeeds
40  virtual bool CreateFolder(const Pathname &pathname);
41
42  // This moves a file from old_path to new_path. If the new path is on a
43  // different volume than the old, it will attempt to copy and then delete
44  // the folder
45  // Returns true if the file is successfully moved
46  virtual bool MoveFile(const Pathname &old_path, const Pathname &new_path);
47
48  // Moves a folder from old_path to new_path. If the new path is on a different
49  // volume from the old, it will attempt to Copy and then Delete the folder
50  // Returns true if the folder is successfully moved
51  virtual bool MoveFolder(const Pathname &old_path, const Pathname &new_path);
52
53  // This copies a file from old_path to _new_path
54  // Returns true if function succeeds
55  virtual bool CopyFile(const Pathname &old_path, const Pathname &new_path);
56
57  // Returns true if a pathname is a directory
58  virtual bool IsFolder(const Pathname& pathname);
59
60  // Returns true if a file exists at path
61  virtual bool IsFile(const Pathname &path);
62
63  // Returns true if pathname refers to no filesystem object, every parent
64  // directory either exists, or is also absent.
65  virtual bool IsAbsent(const Pathname& pathname);
66
67  // Returns true if pathname represents a temporary location on the system.
68  virtual bool IsTemporaryPath(const Pathname& pathname);
69
70  // All of the following functions set pathname and return true if successful.
71  // Returned paths always include a trailing backslash.
72  // If create is true, the path will be recursively created.
73  // If append is non-NULL, it will be appended (and possibly created).
74
75  virtual std::string TempFilename(const Pathname &dir, const std::string &prefix);
76
77  virtual bool GetFileSize(const Pathname& path, size_t* size);
78  virtual bool GetFileTime(const Pathname& path, FileTimeType which,
79                           time_t* time);
80
81  // A folder appropriate for storing temporary files (Contents are
82  // automatically deleted when the program exists)
83  virtual bool GetTemporaryFolder(Pathname &path, bool create,
84                                 const std::string *append);
85
86  // Returns the path to the running application.
87  virtual bool GetAppPathname(Pathname* path);
88
89  virtual bool GetAppDataFolder(Pathname* path, bool per_user);
90
91  // Get a temporary folder that is unique to the current user and application.
92  virtual bool GetAppTempFolder(Pathname* path);
93
94  virtual bool GetDiskFreeSpace(const Pathname& path, int64 *freebytes);
95
96  virtual Pathname GetCurrentDirectory();
97};
98
99}  // namespace rtc
100
101#endif  // WEBRTC_WINFILESYSTEM_H__
102