OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // This file contains utility functions for dealing with the local | 5 // This file contains utility functions for dealing with the local |
6 // filesystem. | 6 // filesystem. |
7 | 7 |
8 #ifndef BASE_FILE_UTIL_H_ | 8 #ifndef BASE_FILE_UTIL_H_ |
9 #define BASE_FILE_UTIL_H_ | 9 #define BASE_FILE_UTIL_H_ |
10 | 10 |
(...skipping 24 matching lines...) Expand all Loading... |
35 #include "base/logging.h" | 35 #include "base/logging.h" |
36 #include "base/posix/eintr_wrapper.h" | 36 #include "base/posix/eintr_wrapper.h" |
37 #endif | 37 #endif |
38 | 38 |
39 namespace base { | 39 namespace base { |
40 | 40 |
41 class Time; | 41 class Time; |
42 | 42 |
43 extern bool g_bug108724_debug; | 43 extern bool g_bug108724_debug; |
44 | 44 |
| 45 void DoSomething(const FilePath&); |
| 46 |
45 //----------------------------------------------------------------------------- | 47 //----------------------------------------------------------------------------- |
46 // Functions that involve filesystem access or modification: | 48 // Functions that involve filesystem access or modification: |
47 | 49 |
48 // Returns an absolute version of a relative path. Returns an empty path on | 50 // Returns an absolute version of a relative path. Returns an empty path on |
49 // error. On POSIX, this function fails if the path does not exist. This | 51 // error. On POSIX, this function fails if the path does not exist. This |
50 // function can result in I/O so it can be slow. | 52 // function can result in I/O so it can be slow. |
51 BASE_EXPORT FilePath MakeAbsoluteFilePath(const FilePath& input); | 53 BASE_EXPORT FilePath MakeAbsoluteFilePath(const FilePath& input); |
52 | 54 |
53 // Returns the total number of bytes used by all the files under |root_path|. | 55 // Returns the total number of bytes used by all the files under |root_path|. |
54 // If the path does not exist the function returns 0. | 56 // If the path does not exist the function returns 0. |
(...skipping 25 matching lines...) Expand all Loading... |
80 BASE_EXPORT bool DeleteAfterReboot(const FilePath& path); | 82 BASE_EXPORT bool DeleteAfterReboot(const FilePath& path); |
81 #endif | 83 #endif |
82 | 84 |
83 // Moves the given path, whether it's a file or a directory. | 85 // Moves the given path, whether it's a file or a directory. |
84 // If a simple rename is not possible, such as in the case where the paths are | 86 // If a simple rename is not possible, such as in the case where the paths are |
85 // on different volumes, this will attempt to copy and delete. Returns | 87 // on different volumes, this will attempt to copy and delete. Returns |
86 // true for success. | 88 // true for success. |
87 // This function fails if either path contains traversal components ('..'). | 89 // This function fails if either path contains traversal components ('..'). |
88 BASE_EXPORT bool Move(const FilePath& from_path, const FilePath& to_path); | 90 BASE_EXPORT bool Move(const FilePath& from_path, const FilePath& to_path); |
89 | 91 |
90 // Same as Move but allows paths with traversal components. | |
91 // Use only with extreme care. | |
92 BASE_EXPORT bool MoveUnsafe(const FilePath& from_path, | |
93 const FilePath& to_path); | |
94 | |
95 // Renames file |from_path| to |to_path|. Both paths must be on the same | 92 // Renames file |from_path| to |to_path|. Both paths must be on the same |
96 // volume, or the function will fail. Destination file will be created | 93 // volume, or the function will fail. Destination file will be created |
97 // if it doesn't exist. Prefer this function over Move when dealing with | 94 // if it doesn't exist. Prefer this function over Move when dealing with |
98 // temporary files. On Windows it preserves attributes of the target file. | 95 // temporary files. On Windows it preserves attributes of the target file. |
99 // Returns true on success, leaving *error unchanged. | 96 // Returns true on success, leaving *error unchanged. |
100 // Returns false on failure and sets *error appropriately, if it is non-NULL. | 97 // Returns false on failure and sets *error appropriately, if it is non-NULL. |
101 BASE_EXPORT bool ReplaceFile(const FilePath& from_path, | 98 BASE_EXPORT bool ReplaceFile(const FilePath& from_path, |
102 const FilePath& to_path, | 99 const FilePath& to_path, |
103 PlatformFileError* error); | 100 PlatformFileError* error); |
104 | 101 |
105 } // namespace base | |
106 | |
107 // ----------------------------------------------------------------------------- | |
108 | |
109 namespace file_util { | |
110 | |
111 // Copies a single file. Use CopyDirectory to copy directories. | 102 // Copies a single file. Use CopyDirectory to copy directories. |
112 // This function fails if either path contains traversal components ('..'). | 103 // This function fails if either path contains traversal components ('..'). |
113 BASE_EXPORT bool CopyFile(const base::FilePath& from_path, | 104 BASE_EXPORT bool CopyFile(const FilePath& from_path, const FilePath& to_path); |
114 const base::FilePath& to_path); | |
115 | |
116 // Same as CopyFile but allows paths with traversal components. | |
117 // Use only with extreme care. | |
118 BASE_EXPORT bool CopyFileUnsafe(const base::FilePath& from_path, | |
119 const base::FilePath& to_path); | |
120 | 105 |
121 // Copies the given path, and optionally all subdirectories and their contents | 106 // Copies the given path, and optionally all subdirectories and their contents |
122 // as well. | 107 // as well. |
123 // | 108 // |
124 // If there are files existing under to_path, always overwrite. Returns true | 109 // If there are files existing under to_path, always overwrite. Returns true |
125 // if successful, false otherwise. Wildcards on the names are not supported. | 110 // if successful, false otherwise. Wildcards on the names are not supported. |
126 // | 111 // |
127 // If you only need to copy a file use CopyFile, it's faster. | 112 // If you only need to copy a file use CopyFile, it's faster. |
128 BASE_EXPORT bool CopyDirectory(const base::FilePath& from_path, | 113 BASE_EXPORT bool CopyDirectory(const FilePath& from_path, |
129 const base::FilePath& to_path, | 114 const FilePath& to_path, |
130 bool recursive); | 115 bool recursive); |
131 | 116 |
| 117 } // namespace base |
| 118 |
| 119 // ----------------------------------------------------------------------------- |
| 120 |
| 121 namespace file_util { |
| 122 |
132 // Returns true if the given path exists on the local filesystem, | 123 // Returns true if the given path exists on the local filesystem, |
133 // false otherwise. | 124 // false otherwise. |
134 BASE_EXPORT bool PathExists(const base::FilePath& path); | 125 BASE_EXPORT bool PathExists(const base::FilePath& path); |
135 | 126 |
136 // Returns true if the given path is writable by the user, false otherwise. | 127 // Returns true if the given path is writable by the user, false otherwise. |
137 BASE_EXPORT bool PathIsWritable(const base::FilePath& path); | 128 BASE_EXPORT bool PathIsWritable(const base::FilePath& path); |
138 | 129 |
139 // Returns true if the given path exists and is a directory, false otherwise. | 130 // Returns true if the given path exists and is a directory, false otherwise. |
140 BASE_EXPORT bool DirectoryExists(const base::FilePath& path); | 131 BASE_EXPORT bool DirectoryExists(const base::FilePath& path); |
141 | 132 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 // bits in |mode|. If |path| is symbolic link, |mode| is the permission of | 186 // bits in |mode|. If |path| is symbolic link, |mode| is the permission of |
196 // a file which the symlink points to. | 187 // a file which the symlink points to. |
197 BASE_EXPORT bool GetPosixFilePermissions(const base::FilePath& path, | 188 BASE_EXPORT bool GetPosixFilePermissions(const base::FilePath& path, |
198 int* mode); | 189 int* mode); |
199 // Sets the permission of the given |path|. If |path| is symbolic link, sets | 190 // Sets the permission of the given |path|. If |path| is symbolic link, sets |
200 // the permission of a file which the symlink points to. | 191 // the permission of a file which the symlink points to. |
201 BASE_EXPORT bool SetPosixFilePermissions(const base::FilePath& path, | 192 BASE_EXPORT bool SetPosixFilePermissions(const base::FilePath& path, |
202 int mode); | 193 int mode); |
203 #endif // defined(OS_POSIX) | 194 #endif // defined(OS_POSIX) |
204 | 195 |
205 #if defined(OS_WIN) | |
206 // Copy from_path to to_path recursively and then delete from_path recursively. | |
207 // Returns true if all operations succeed. | |
208 // This function simulates Move(), but unlike Move() it works across volumes. | |
209 // This fuction is not transactional. | |
210 BASE_EXPORT bool CopyAndDeleteDirectory(const base::FilePath& from_path, | |
211 const base::FilePath& to_path); | |
212 #endif // defined(OS_WIN) | |
213 | |
214 // Return true if the given directory is empty | 196 // Return true if the given directory is empty |
215 BASE_EXPORT bool IsDirectoryEmpty(const base::FilePath& dir_path); | 197 BASE_EXPORT bool IsDirectoryEmpty(const base::FilePath& dir_path); |
216 | 198 |
217 // Get the temporary directory provided by the system. | 199 // Get the temporary directory provided by the system. |
218 // WARNING: DON'T USE THIS. If you want to create a temporary file, use one of | 200 // WARNING: DON'T USE THIS. If you want to create a temporary file, use one of |
219 // the functions below. | 201 // the functions below. |
220 BASE_EXPORT bool GetTempDir(base::FilePath* path); | 202 BASE_EXPORT bool GetTempDir(base::FilePath* path); |
221 // Get a temporary directory for shared memory files. | 203 // Get a temporary directory for shared memory files. |
222 // Only useful on POSIX; redirects to GetTempDir() on Windows. | 204 // Only useful on POSIX; redirects to GetTempDir() on Windows. |
223 BASE_EXPORT bool GetShmemTempDir(base::FilePath* path, bool executable); | 205 BASE_EXPORT bool GetShmemTempDir(base::FilePath* path, bool executable); |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 }; | 429 }; |
448 | 430 |
449 // Attempts determine the FileSystemType for |path|. | 431 // Attempts determine the FileSystemType for |path|. |
450 // Returns false if |path| doesn't exist. | 432 // Returns false if |path| doesn't exist. |
451 BASE_EXPORT bool GetFileSystemType(const base::FilePath& path, | 433 BASE_EXPORT bool GetFileSystemType(const base::FilePath& path, |
452 FileSystemType* type); | 434 FileSystemType* type); |
453 #endif | 435 #endif |
454 | 436 |
455 } // namespace file_util | 437 } // namespace file_util |
456 | 438 |
| 439 // Internal -------------------------------------------------------------------- |
| 440 |
| 441 namespace base { |
| 442 namespace internal { |
| 443 |
| 444 // Same as Move but allows paths with traversal components. |
| 445 // Use only with extreme care. |
| 446 BASE_EXPORT bool MoveUnsafe(const FilePath& from_path, |
| 447 const FilePath& to_path); |
| 448 |
| 449 // Same as CopyFile but allows paths with traversal components. |
| 450 // Use only with extreme care. |
| 451 BASE_EXPORT bool CopyFileUnsafe(const FilePath& from_path, |
| 452 const FilePath& to_path); |
| 453 |
| 454 #if defined(OS_WIN) |
| 455 // Copy from_path to to_path recursively and then delete from_path recursively. |
| 456 // Returns true if all operations succeed. |
| 457 // This function simulates Move(), but unlike Move() it works across volumes. |
| 458 // This fuction is not transactional. |
| 459 BASE_EXPORT bool CopyAndDeleteDirectory(const base::FilePath& from_path, |
| 460 const base::FilePath& to_path); |
| 461 #endif // defined(OS_WIN) |
| 462 |
| 463 } // namespace internal |
| 464 } // namespace base |
| 465 |
457 #endif // BASE_FILE_UTIL_H_ | 466 #endif // BASE_FILE_UTIL_H_ |
OLD | NEW |