Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(422)

Side by Side Diff: base/file_util.h

Issue 12163003: Add FilePath to base namespace. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/file_path.h ('k') | base/file_version_info.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 } 42 }
43 43
44 namespace file_util { 44 namespace file_util {
45 45
46 extern bool g_bug108724_debug; 46 extern bool g_bug108724_debug;
47 47
48 //----------------------------------------------------------------------------- 48 //-----------------------------------------------------------------------------
49 // Functions that operate purely on a path string w/o touching the filesystem: 49 // Functions that operate purely on a path string w/o touching the filesystem:
50 50
51 // Returns true if the given path ends with a path separator character. 51 // Returns true if the given path ends with a path separator character.
52 BASE_EXPORT bool EndsWithSeparator(const FilePath& path); 52 BASE_EXPORT bool EndsWithSeparator(const base::FilePath& path);
53 53
54 // Makes sure that |path| ends with a separator IFF path is a directory that 54 // Makes sure that |path| ends with a separator IFF path is a directory that
55 // exists. Returns true if |path| is an existing directory, false otherwise. 55 // exists. Returns true if |path| is an existing directory, false otherwise.
56 BASE_EXPORT bool EnsureEndsWithSeparator(FilePath* path); 56 BASE_EXPORT bool EnsureEndsWithSeparator(base::FilePath* path);
57 57
58 // Convert provided relative path into an absolute path. Returns false on 58 // Convert provided relative path into an absolute path. Returns false on
59 // error. On POSIX, this function fails if the path does not exist. 59 // error. On POSIX, this function fails if the path does not exist.
60 BASE_EXPORT bool AbsolutePath(FilePath* path); 60 BASE_EXPORT bool AbsolutePath(base::FilePath* path);
61 61
62 // Returns true if |parent| contains |child|. Both paths are converted to 62 // Returns true if |parent| contains |child|. Both paths are converted to
63 // absolute paths before doing the comparison. 63 // absolute paths before doing the comparison.
64 BASE_EXPORT bool ContainsPath(const FilePath& parent, const FilePath& child); 64 BASE_EXPORT bool ContainsPath(const base::FilePath& parent,
65 const base::FilePath& child);
65 66
66 //----------------------------------------------------------------------------- 67 //-----------------------------------------------------------------------------
67 // Functions that involve filesystem access or modification: 68 // Functions that involve filesystem access or modification:
68 69
69 // Returns the number of files matching the current path that were 70 // Returns the number of files matching the current path that were
70 // created on or after the given |file_time|. Doesn't count ".." or ".". 71 // created on or after the given |file_time|. Doesn't count ".." or ".".
71 // 72 //
72 // Note for POSIX environments: a file created before |file_time| 73 // Note for POSIX environments: a file created before |file_time|
73 // can be mis-detected as a newer file due to low precision of 74 // can be mis-detected as a newer file due to low precision of
74 // timestmap of file creation time. If you need to avoid such 75 // timestmap of file creation time. If you need to avoid such
75 // mis-detection perfectly, you should wait one second before 76 // mis-detection perfectly, you should wait one second before
76 // obtaining |file_time|. 77 // obtaining |file_time|.
77 BASE_EXPORT int CountFilesCreatedAfter(const FilePath& path, 78 BASE_EXPORT int CountFilesCreatedAfter(const base::FilePath& path,
78 const base::Time& file_time); 79 const base::Time& file_time);
79 80
80 // Returns the total number of bytes used by all the files under |root_path|. 81 // Returns the total number of bytes used by all the files under |root_path|.
81 // If the path does not exist the function returns 0. 82 // If the path does not exist the function returns 0.
82 // 83 //
83 // This function is implemented using the FileEnumerator class so it is not 84 // This function is implemented using the FileEnumerator class so it is not
84 // particularly speedy in any platform. 85 // particularly speedy in any platform.
85 BASE_EXPORT int64 ComputeDirectorySize(const FilePath& root_path); 86 BASE_EXPORT int64 ComputeDirectorySize(const base::FilePath& root_path);
86 87
87 // Returns the total number of bytes used by all files matching the provided 88 // Returns the total number of bytes used by all files matching the provided
88 // |pattern|, on this |directory| (without recursion). If the path does not 89 // |pattern|, on this |directory| (without recursion). If the path does not
89 // exist the function returns 0. 90 // exist the function returns 0.
90 // 91 //
91 // This function is implemented using the FileEnumerator class so it is not 92 // This function is implemented using the FileEnumerator class so it is not
92 // particularly speedy in any platform. 93 // particularly speedy in any platform.
93 BASE_EXPORT int64 ComputeFilesSize(const FilePath& directory, 94 BASE_EXPORT int64 ComputeFilesSize(const base::FilePath& directory,
94 const FilePath::StringType& pattern); 95 const base::FilePath::StringType& pattern);
95 96
96 // Deletes the given path, whether it's a file or a directory. 97 // Deletes the given path, whether it's a file or a directory.
97 // If it's a directory, it's perfectly happy to delete all of the 98 // If it's a directory, it's perfectly happy to delete all of the
98 // directory's contents. Passing true to recursive deletes 99 // directory's contents. Passing true to recursive deletes
99 // subdirectories and their contents as well. 100 // subdirectories and their contents as well.
100 // Returns true if successful, false otherwise. 101 // Returns true if successful, false otherwise.
101 // 102 //
102 // In posix environment and if |path| is a symbolic link, this deletes only 103 // In posix environment and if |path| is a symbolic link, this deletes only
103 // the symlink. (even if the symlink points to a non-existent file) 104 // the symlink. (even if the symlink points to a non-existent file)
104 // 105 //
105 // WARNING: USING THIS WITH recursive==true IS EQUIVALENT 106 // WARNING: USING THIS WITH recursive==true IS EQUIVALENT
106 // TO "rm -rf", SO USE WITH CAUTION. 107 // TO "rm -rf", SO USE WITH CAUTION.
107 BASE_EXPORT bool Delete(const FilePath& path, bool recursive); 108 BASE_EXPORT bool Delete(const base::FilePath& path, bool recursive);
108 109
109 #if defined(OS_WIN) 110 #if defined(OS_WIN)
110 // Schedules to delete the given path, whether it's a file or a directory, until 111 // Schedules to delete the given path, whether it's a file or a directory, until
111 // the operating system is restarted. 112 // the operating system is restarted.
112 // Note: 113 // Note:
113 // 1) The file/directory to be deleted should exist in a temp folder. 114 // 1) The file/directory to be deleted should exist in a temp folder.
114 // 2) The directory to be deleted must be empty. 115 // 2) The directory to be deleted must be empty.
115 BASE_EXPORT bool DeleteAfterReboot(const FilePath& path); 116 BASE_EXPORT bool DeleteAfterReboot(const base::FilePath& path);
116 #endif 117 #endif
117 118
118 // Moves the given path, whether it's a file or a directory. 119 // Moves the given path, whether it's a file or a directory.
119 // If a simple rename is not possible, such as in the case where the paths are 120 // If a simple rename is not possible, such as in the case where the paths are
120 // on different volumes, this will attempt to copy and delete. Returns 121 // on different volumes, this will attempt to copy and delete. Returns
121 // true for success. 122 // true for success.
122 BASE_EXPORT bool Move(const FilePath& from_path, const FilePath& to_path); 123 BASE_EXPORT bool Move(const base::FilePath& from_path,
124 const base::FilePath& to_path);
123 125
124 // Renames file |from_path| to |to_path|. Both paths must be on the same 126 // Renames file |from_path| to |to_path|. Both paths must be on the same
125 // volume, or the function will fail. Destination file will be created 127 // volume, or the function will fail. Destination file will be created
126 // if it doesn't exist. Prefer this function over Move when dealing with 128 // if it doesn't exist. Prefer this function over Move when dealing with
127 // temporary files. On Windows it preserves attributes of the target file. 129 // temporary files. On Windows it preserves attributes of the target file.
128 // Returns true on success. 130 // Returns true on success.
129 BASE_EXPORT bool ReplaceFile(const FilePath& from_path, 131 BASE_EXPORT bool ReplaceFile(const base::FilePath& from_path,
130 const FilePath& to_path); 132 const base::FilePath& to_path);
131 133
132 // Copies a single file. Use CopyDirectory to copy directories. 134 // Copies a single file. Use CopyDirectory to copy directories.
133 BASE_EXPORT bool CopyFile(const FilePath& from_path, const FilePath& to_path); 135 BASE_EXPORT bool CopyFile(const base::FilePath& from_path,
136 const base::FilePath& to_path);
134 137
135 // Copies the given path, and optionally all subdirectories and their contents 138 // Copies the given path, and optionally all subdirectories and their contents
136 // as well. 139 // as well.
137 // If there are files existing under to_path, always overwrite. 140 // If there are files existing under to_path, always overwrite.
138 // Returns true if successful, false otherwise. 141 // Returns true if successful, false otherwise.
139 // Don't use wildcards on the names, it may stop working without notice. 142 // Don't use wildcards on the names, it may stop working without notice.
140 // 143 //
141 // If you only need to copy a file use CopyFile, it's faster. 144 // If you only need to copy a file use CopyFile, it's faster.
142 BASE_EXPORT bool CopyDirectory(const FilePath& from_path, 145 BASE_EXPORT bool CopyDirectory(const base::FilePath& from_path,
143 const FilePath& to_path, 146 const base::FilePath& to_path,
144 bool recursive); 147 bool recursive);
145 148
146 // Returns true if the given path exists on the local filesystem, 149 // Returns true if the given path exists on the local filesystem,
147 // false otherwise. 150 // false otherwise.
148 BASE_EXPORT bool PathExists(const FilePath& path); 151 BASE_EXPORT bool PathExists(const base::FilePath& path);
149 152
150 // Returns true if the given path is writable by the user, false otherwise. 153 // Returns true if the given path is writable by the user, false otherwise.
151 BASE_EXPORT bool PathIsWritable(const FilePath& path); 154 BASE_EXPORT bool PathIsWritable(const base::FilePath& path);
152 155
153 // Returns true if the given path exists and is a directory, false otherwise. 156 // Returns true if the given path exists and is a directory, false otherwise.
154 BASE_EXPORT bool DirectoryExists(const FilePath& path); 157 BASE_EXPORT bool DirectoryExists(const base::FilePath& path);
155 158
156 // Returns true if the contents of the two files given are equal, false 159 // Returns true if the contents of the two files given are equal, false
157 // otherwise. If either file can't be read, returns false. 160 // otherwise. If either file can't be read, returns false.
158 BASE_EXPORT bool ContentsEqual(const FilePath& filename1, 161 BASE_EXPORT bool ContentsEqual(const base::FilePath& filename1,
159 const FilePath& filename2); 162 const base::FilePath& filename2);
160 163
161 // Returns true if the contents of the two text files given are equal, false 164 // Returns true if the contents of the two text files given are equal, false
162 // otherwise. This routine treats "\r\n" and "\n" as equivalent. 165 // otherwise. This routine treats "\r\n" and "\n" as equivalent.
163 BASE_EXPORT bool TextContentsEqual(const FilePath& filename1, 166 BASE_EXPORT bool TextContentsEqual(const base::FilePath& filename1,
164 const FilePath& filename2); 167 const base::FilePath& filename2);
165 168
166 // Read the file at |path| into |contents|, returning true on success. 169 // Read the file at |path| into |contents|, returning true on success.
167 // This function fails if the |path| contains path traversal components ('..'). 170 // This function fails if the |path| contains path traversal components ('..').
168 // |contents| may be NULL, in which case this function is useful for its 171 // |contents| may be NULL, in which case this function is useful for its
169 // side effect of priming the disk cache. 172 // side effect of priming the disk cache.
170 // Useful for unit tests. 173 // Useful for unit tests.
171 BASE_EXPORT bool ReadFileToString(const FilePath& path, std::string* contents); 174 BASE_EXPORT bool ReadFileToString(const base::FilePath& path,
175 std::string* contents);
172 176
173 #if defined(OS_POSIX) 177 #if defined(OS_POSIX)
174 // Read exactly |bytes| bytes from file descriptor |fd|, storing the result 178 // Read exactly |bytes| bytes from file descriptor |fd|, storing the result
175 // in |buffer|. This function is protected against EINTR and partial reads. 179 // in |buffer|. This function is protected against EINTR and partial reads.
176 // Returns true iff |bytes| bytes have been successfuly read from |fd|. 180 // Returns true iff |bytes| bytes have been successfuly read from |fd|.
177 BASE_EXPORT bool ReadFromFD(int fd, char* buffer, size_t bytes); 181 BASE_EXPORT bool ReadFromFD(int fd, char* buffer, size_t bytes);
178 182
179 // Creates a symbolic link at |symlink| pointing to |target|. Returns 183 // Creates a symbolic link at |symlink| pointing to |target|. Returns
180 // false on failure. 184 // false on failure.
181 BASE_EXPORT bool CreateSymbolicLink(const FilePath& target, 185 BASE_EXPORT bool CreateSymbolicLink(const base::FilePath& target,
182 const FilePath& symlink); 186 const base::FilePath& symlink);
183 187
184 // Reads the given |symlink| and returns where it points to in |target|. 188 // Reads the given |symlink| and returns where it points to in |target|.
185 // Returns false upon failure. 189 // Returns false upon failure.
186 BASE_EXPORT bool ReadSymbolicLink(const FilePath& symlink, FilePath* target); 190 BASE_EXPORT bool ReadSymbolicLink(const base::FilePath& symlink,
191 base::FilePath* target);
187 192
188 // Bits ans masks of the file permission. 193 // Bits ans masks of the file permission.
189 enum FilePermissionBits { 194 enum FilePermissionBits {
190 FILE_PERMISSION_MASK = S_IRWXU | S_IRWXG | S_IRWXO, 195 FILE_PERMISSION_MASK = S_IRWXU | S_IRWXG | S_IRWXO,
191 FILE_PERMISSION_USER_MASK = S_IRWXU, 196 FILE_PERMISSION_USER_MASK = S_IRWXU,
192 FILE_PERMISSION_GROUP_MASK = S_IRWXG, 197 FILE_PERMISSION_GROUP_MASK = S_IRWXG,
193 FILE_PERMISSION_OTHERS_MASK = S_IRWXO, 198 FILE_PERMISSION_OTHERS_MASK = S_IRWXO,
194 199
195 FILE_PERMISSION_READ_BY_USER = S_IRUSR, 200 FILE_PERMISSION_READ_BY_USER = S_IRUSR,
196 FILE_PERMISSION_WRITE_BY_USER = S_IWUSR, 201 FILE_PERMISSION_WRITE_BY_USER = S_IWUSR,
197 FILE_PERMISSION_EXECUTE_BY_USER = S_IXUSR, 202 FILE_PERMISSION_EXECUTE_BY_USER = S_IXUSR,
198 FILE_PERMISSION_READ_BY_GROUP = S_IRGRP, 203 FILE_PERMISSION_READ_BY_GROUP = S_IRGRP,
199 FILE_PERMISSION_WRITE_BY_GROUP = S_IWGRP, 204 FILE_PERMISSION_WRITE_BY_GROUP = S_IWGRP,
200 FILE_PERMISSION_EXECUTE_BY_GROUP = S_IXGRP, 205 FILE_PERMISSION_EXECUTE_BY_GROUP = S_IXGRP,
201 FILE_PERMISSION_READ_BY_OTHERS = S_IROTH, 206 FILE_PERMISSION_READ_BY_OTHERS = S_IROTH,
202 FILE_PERMISSION_WRITE_BY_OTHERS = S_IWOTH, 207 FILE_PERMISSION_WRITE_BY_OTHERS = S_IWOTH,
203 FILE_PERMISSION_EXECUTE_BY_OTHERS = S_IXOTH, 208 FILE_PERMISSION_EXECUTE_BY_OTHERS = S_IXOTH,
204 }; 209 };
205 210
206 // Reads the permission of the given |path|, storing the file permission 211 // Reads the permission of the given |path|, storing the file permission
207 // bits in |mode|. If |path| is symbolic link, |mode| is the permission of 212 // bits in |mode|. If |path| is symbolic link, |mode| is the permission of
208 // a file which the symlink points to. 213 // a file which the symlink points to.
209 BASE_EXPORT bool GetPosixFilePermissions(const FilePath& path, 214 BASE_EXPORT bool GetPosixFilePermissions(const base::FilePath& path,
210 int* mode); 215 int* mode);
211 // Sets the permission of the given |path|. If |path| is symbolic link, sets 216 // Sets the permission of the given |path|. If |path| is symbolic link, sets
212 // the permission of a file which the symlink points to. 217 // the permission of a file which the symlink points to.
213 BASE_EXPORT bool SetPosixFilePermissions(const FilePath& path, 218 BASE_EXPORT bool SetPosixFilePermissions(const base::FilePath& path,
214 int mode); 219 int mode);
215 #endif // defined(OS_POSIX) 220 #endif // defined(OS_POSIX)
216 221
217 #if defined(OS_WIN) 222 #if defined(OS_WIN)
218 // Copy from_path to to_path recursively and then delete from_path recursively. 223 // Copy from_path to to_path recursively and then delete from_path recursively.
219 // Returns true if all operations succeed. 224 // Returns true if all operations succeed.
220 // This function simulates Move(), but unlike Move() it works across volumes. 225 // This function simulates Move(), but unlike Move() it works across volumes.
221 // This fuction is not transactional. 226 // This fuction is not transactional.
222 BASE_EXPORT bool CopyAndDeleteDirectory(const FilePath& from_path, 227 BASE_EXPORT bool CopyAndDeleteDirectory(const base::FilePath& from_path,
223 const FilePath& to_path); 228 const base::FilePath& to_path);
224 #endif // defined(OS_WIN) 229 #endif // defined(OS_WIN)
225 230
226 // Return true if the given directory is empty 231 // Return true if the given directory is empty
227 BASE_EXPORT bool IsDirectoryEmpty(const FilePath& dir_path); 232 BASE_EXPORT bool IsDirectoryEmpty(const base::FilePath& dir_path);
228 233
229 // Get the temporary directory provided by the system. 234 // Get the temporary directory provided by the system.
230 // WARNING: DON'T USE THIS. If you want to create a temporary file, use one of 235 // WARNING: DON'T USE THIS. If you want to create a temporary file, use one of
231 // the functions below. 236 // the functions below.
232 BASE_EXPORT bool GetTempDir(FilePath* path); 237 BASE_EXPORT bool GetTempDir(base::FilePath* path);
233 // Get a temporary directory for shared memory files. 238 // Get a temporary directory for shared memory files.
234 // Only useful on POSIX; redirects to GetTempDir() on Windows. 239 // Only useful on POSIX; redirects to GetTempDir() on Windows.
235 BASE_EXPORT bool GetShmemTempDir(FilePath* path, bool executable); 240 BASE_EXPORT bool GetShmemTempDir(base::FilePath* path, bool executable);
236 241
237 // Get the home directory. This is more complicated than just getenv("HOME") 242 // Get the home directory. This is more complicated than just getenv("HOME")
238 // as it knows to fall back on getpwent() etc. 243 // as it knows to fall back on getpwent() etc.
239 BASE_EXPORT FilePath GetHomeDir(); 244 BASE_EXPORT base::FilePath GetHomeDir();
240 245
241 // Creates a temporary file. The full path is placed in |path|, and the 246 // Creates a temporary file. The full path is placed in |path|, and the
242 // function returns true if was successful in creating the file. The file will 247 // function returns true if was successful in creating the file. The file will
243 // be empty and all handles closed after this function returns. 248 // be empty and all handles closed after this function returns.
244 BASE_EXPORT bool CreateTemporaryFile(FilePath* path); 249 BASE_EXPORT bool CreateTemporaryFile(base::FilePath* path);
245 250
246 // Same as CreateTemporaryFile but the file is created in |dir|. 251 // Same as CreateTemporaryFile but the file is created in |dir|.
247 BASE_EXPORT bool CreateTemporaryFileInDir(const FilePath& dir, 252 BASE_EXPORT bool CreateTemporaryFileInDir(const base::FilePath& dir,
248 FilePath* temp_file); 253 base::FilePath* temp_file);
249 254
250 // Create and open a temporary file. File is opened for read/write. 255 // Create and open a temporary file. File is opened for read/write.
251 // The full path is placed in |path|. 256 // The full path is placed in |path|.
252 // Returns a handle to the opened file or NULL if an error occured. 257 // Returns a handle to the opened file or NULL if an error occured.
253 BASE_EXPORT FILE* CreateAndOpenTemporaryFile(FilePath* path); 258 BASE_EXPORT FILE* CreateAndOpenTemporaryFile(base::FilePath* path);
254 // Like above but for shmem files. Only useful for POSIX. 259 // Like above but for shmem files. Only useful for POSIX.
255 // The executable flag says the file needs to support using 260 // The executable flag says the file needs to support using
256 // mprotect with PROT_EXEC after mapping. 261 // mprotect with PROT_EXEC after mapping.
257 BASE_EXPORT FILE* CreateAndOpenTemporaryShmemFile(FilePath* path, 262 BASE_EXPORT FILE* CreateAndOpenTemporaryShmemFile(base::FilePath* path,
258 bool executable); 263 bool executable);
259 // Similar to CreateAndOpenTemporaryFile, but the file is created in |dir|. 264 // Similar to CreateAndOpenTemporaryFile, but the file is created in |dir|.
260 BASE_EXPORT FILE* CreateAndOpenTemporaryFileInDir(const FilePath& dir, 265 BASE_EXPORT FILE* CreateAndOpenTemporaryFileInDir(const base::FilePath& dir,
261 FilePath* path); 266 base::FilePath* path);
262 267
263 // Create a new directory. If prefix is provided, the new directory name is in 268 // Create a new directory. If prefix is provided, the new directory name is in
264 // the format of prefixyyyy. 269 // the format of prefixyyyy.
265 // NOTE: prefix is ignored in the POSIX implementation. 270 // NOTE: prefix is ignored in the POSIX implementation.
266 // If success, return true and output the full path of the directory created. 271 // If success, return true and output the full path of the directory created.
267 BASE_EXPORT bool CreateNewTempDirectory(const FilePath::StringType& prefix, 272 BASE_EXPORT bool CreateNewTempDirectory(
268 FilePath* new_temp_path); 273 const base::FilePath::StringType& prefix,
274 base::FilePath* new_temp_path);
269 275
270 // Create a directory within another directory. 276 // Create a directory within another directory.
271 // Extra characters will be appended to |prefix| to ensure that the 277 // Extra characters will be appended to |prefix| to ensure that the
272 // new directory does not have the same name as an existing directory. 278 // new directory does not have the same name as an existing directory.
273 BASE_EXPORT bool CreateTemporaryDirInDir(const FilePath& base_dir, 279 BASE_EXPORT bool CreateTemporaryDirInDir(
274 const FilePath::StringType& prefix, 280 const base::FilePath& base_dir,
275 FilePath* new_dir); 281 const base::FilePath::StringType& prefix,
282 base::FilePath* new_dir);
276 283
277 // Creates a directory, as well as creating any parent directories, if they 284 // Creates a directory, as well as creating any parent directories, if they
278 // don't exist. Returns 'true' on successful creation, or if the directory 285 // don't exist. Returns 'true' on successful creation, or if the directory
279 // already exists. The directory is only readable by the current user. 286 // already exists. The directory is only readable by the current user.
280 BASE_EXPORT bool CreateDirectory(const FilePath& full_path); 287 BASE_EXPORT bool CreateDirectory(const base::FilePath& full_path);
281 288
282 // Returns the file size. Returns true on success. 289 // Returns the file size. Returns true on success.
283 BASE_EXPORT bool GetFileSize(const FilePath& file_path, int64* file_size); 290 BASE_EXPORT bool GetFileSize(const base::FilePath& file_path, int64* file_size);
284 291
285 // Returns true if the given path's base name is ".". 292 // Returns true if the given path's base name is ".".
286 BASE_EXPORT bool IsDot(const FilePath& path); 293 BASE_EXPORT bool IsDot(const base::FilePath& path);
287 294
288 // Returns true if the given path's base name is "..". 295 // Returns true if the given path's base name is "..".
289 BASE_EXPORT bool IsDotDot(const FilePath& path); 296 BASE_EXPORT bool IsDotDot(const base::FilePath& path);
290 297
291 // Sets |real_path| to |path| with symbolic links and junctions expanded. 298 // Sets |real_path| to |path| with symbolic links and junctions expanded.
292 // On windows, make sure the path starts with a lettered drive. 299 // On windows, make sure the path starts with a lettered drive.
293 // |path| must reference a file. Function will fail if |path| points to 300 // |path| must reference a file. Function will fail if |path| points to
294 // a directory or to a nonexistent path. On windows, this function will 301 // a directory or to a nonexistent path. On windows, this function will
295 // fail if |path| is a junction or symlink that points to an empty file, 302 // fail if |path| is a junction or symlink that points to an empty file,
296 // or if |real_path| would be longer than MAX_PATH characters. 303 // or if |real_path| would be longer than MAX_PATH characters.
297 BASE_EXPORT bool NormalizeFilePath(const FilePath& path, FilePath* real_path); 304 BASE_EXPORT bool NormalizeFilePath(const base::FilePath& path,
305 base::FilePath* real_path);
298 306
299 #if defined(OS_WIN) 307 #if defined(OS_WIN)
300 308
301 // Given a path in NT native form ("\Device\HarddiskVolumeXX\..."), 309 // Given a path in NT native form ("\Device\HarddiskVolumeXX\..."),
302 // return in |drive_letter_path| the equivalent path that starts with 310 // return in |drive_letter_path| the equivalent path that starts with
303 // a drive letter ("C:\..."). Return false if no such path exists. 311 // a drive letter ("C:\..."). Return false if no such path exists.
304 BASE_EXPORT bool DevicePathToDriveLetterPath(const FilePath& device_path, 312 BASE_EXPORT bool DevicePathToDriveLetterPath(const base::FilePath& device_path,
305 FilePath* drive_letter_path); 313 base::FilePath* drive_letter_path);
306 314
307 // Given an existing file in |path|, set |real_path| to the path 315 // Given an existing file in |path|, set |real_path| to the path
308 // in native NT format, of the form "\Device\HarddiskVolumeXX\..". 316 // in native NT format, of the form "\Device\HarddiskVolumeXX\..".
309 // Returns false if the path can not be found. Empty files cannot 317 // Returns false if the path can not be found. Empty files cannot
310 // be resolved with this function. 318 // be resolved with this function.
311 BASE_EXPORT bool NormalizeToNativeFilePath(const FilePath& path, 319 BASE_EXPORT bool NormalizeToNativeFilePath(const base::FilePath& path,
312 FilePath* nt_path); 320 base::FilePath* nt_path);
313 #endif 321 #endif
314 322
315 // This function will return if the given file is a symlink or not. 323 // This function will return if the given file is a symlink or not.
316 BASE_EXPORT bool IsLink(const FilePath& file_path); 324 BASE_EXPORT bool IsLink(const base::FilePath& file_path);
317 325
318 // Returns information about the given file path. 326 // Returns information about the given file path.
319 BASE_EXPORT bool GetFileInfo(const FilePath& file_path, 327 BASE_EXPORT bool GetFileInfo(const base::FilePath& file_path,
320 base::PlatformFileInfo* info); 328 base::PlatformFileInfo* info);
321 329
322 // Sets the time of the last access and the time of the last modification. 330 // Sets the time of the last access and the time of the last modification.
323 BASE_EXPORT bool TouchFile(const FilePath& path, 331 BASE_EXPORT bool TouchFile(const base::FilePath& path,
324 const base::Time& last_accessed, 332 const base::Time& last_accessed,
325 const base::Time& last_modified); 333 const base::Time& last_modified);
326 334
327 // Set the time of the last modification. Useful for unit tests. 335 // Set the time of the last modification. Useful for unit tests.
328 BASE_EXPORT bool SetLastModifiedTime(const FilePath& path, 336 BASE_EXPORT bool SetLastModifiedTime(const base::FilePath& path,
329 const base::Time& last_modified); 337 const base::Time& last_modified);
330 338
331 #if defined(OS_POSIX) 339 #if defined(OS_POSIX)
332 // Store inode number of |path| in |inode|. Return true on success. 340 // Store inode number of |path| in |inode|. Return true on success.
333 BASE_EXPORT bool GetInode(const FilePath& path, ino_t* inode); 341 BASE_EXPORT bool GetInode(const base::FilePath& path, ino_t* inode);
334 #endif 342 #endif
335 343
336 // Wrapper for fopen-like calls. Returns non-NULL FILE* on success. 344 // Wrapper for fopen-like calls. Returns non-NULL FILE* on success.
337 BASE_EXPORT FILE* OpenFile(const FilePath& filename, const char* mode); 345 BASE_EXPORT FILE* OpenFile(const base::FilePath& filename, const char* mode);
338 346
339 // Closes file opened by OpenFile. Returns true on success. 347 // Closes file opened by OpenFile. Returns true on success.
340 BASE_EXPORT bool CloseFile(FILE* file); 348 BASE_EXPORT bool CloseFile(FILE* file);
341 349
342 // Truncates an open file to end at the location of the current file pointer. 350 // Truncates an open file to end at the location of the current file pointer.
343 // This is a cross-platform analog to Windows' SetEndOfFile() function. 351 // This is a cross-platform analog to Windows' SetEndOfFile() function.
344 BASE_EXPORT bool TruncateFile(FILE* file); 352 BASE_EXPORT bool TruncateFile(FILE* file);
345 353
346 // Reads the given number of bytes from the file into the buffer. Returns 354 // Reads the given number of bytes from the file into the buffer. Returns
347 // the number of read bytes, or -1 on error. 355 // the number of read bytes, or -1 on error.
348 BASE_EXPORT int ReadFile(const FilePath& filename, char* data, int size); 356 BASE_EXPORT int ReadFile(const base::FilePath& filename, char* data, int size);
349 357
350 // Writes the given buffer into the file, overwriting any data that was 358 // Writes the given buffer into the file, overwriting any data that was
351 // previously there. Returns the number of bytes written, or -1 on error. 359 // previously there. Returns the number of bytes written, or -1 on error.
352 BASE_EXPORT int WriteFile(const FilePath& filename, const char* data, int size); 360 BASE_EXPORT int WriteFile(const base::FilePath& filename, const char* data,
361 int size);
353 #if defined(OS_POSIX) 362 #if defined(OS_POSIX)
354 // Append the data to |fd|. Does not close |fd| when done. 363 // Append the data to |fd|. Does not close |fd| when done.
355 BASE_EXPORT int WriteFileDescriptor(const int fd, const char* data, int size); 364 BASE_EXPORT int WriteFileDescriptor(const int fd, const char* data, int size);
356 #endif 365 #endif
357 // Append the given buffer into the file. Returns the number of bytes written, 366 // Append the given buffer into the file. Returns the number of bytes written,
358 // or -1 on error. 367 // or -1 on error.
359 BASE_EXPORT int AppendToFile(const FilePath& filename, 368 BASE_EXPORT int AppendToFile(const base::FilePath& filename,
360 const char* data, int size); 369 const char* data, int size);
361 370
362 // Gets the current working directory for the process. 371 // Gets the current working directory for the process.
363 BASE_EXPORT bool GetCurrentDirectory(FilePath* path); 372 BASE_EXPORT bool GetCurrentDirectory(base::FilePath* path);
364 373
365 // Sets the current working directory for the process. 374 // Sets the current working directory for the process.
366 BASE_EXPORT bool SetCurrentDirectory(const FilePath& path); 375 BASE_EXPORT bool SetCurrentDirectory(const base::FilePath& path);
367 376
368 // Attempts to find a number that can be appended to the |path| to make it 377 // Attempts to find a number that can be appended to the |path| to make it
369 // unique. If |path| does not exist, 0 is returned. If it fails to find such 378 // unique. If |path| does not exist, 0 is returned. If it fails to find such
370 // a number, -1 is returned. If |suffix| is not empty, also checks the 379 // a number, -1 is returned. If |suffix| is not empty, also checks the
371 // existence of it with the given suffix. 380 // existence of it with the given suffix.
372 BASE_EXPORT int GetUniquePathNumber(const FilePath& path, 381 BASE_EXPORT int GetUniquePathNumber(const base::FilePath& path,
373 const FilePath::StringType& suffix); 382 const base::FilePath::StringType& suffix);
374 383
375 #if defined(OS_POSIX) 384 #if defined(OS_POSIX)
376 // Test that |path| can only be changed by a given user and members of 385 // Test that |path| can only be changed by a given user and members of
377 // a given set of groups. 386 // a given set of groups.
378 // Specifically, test that all parts of |path| under (and including) |base|: 387 // Specifically, test that all parts of |path| under (and including) |base|:
379 // * Exist. 388 // * Exist.
380 // * Are owned by a specific user. 389 // * Are owned by a specific user.
381 // * Are not writable by all users. 390 // * Are not writable by all users.
382 // * Are owned by a memeber of a given set of groups, or are not writable by 391 // * Are owned by a memeber of a given set of groups, or are not writable by
383 // their group. 392 // their group.
384 // * Are not symbolic links. 393 // * Are not symbolic links.
385 // This is useful for checking that a config file is administrator-controlled. 394 // This is useful for checking that a config file is administrator-controlled.
386 // |base| must contain |path|. 395 // |base| must contain |path|.
387 BASE_EXPORT bool VerifyPathControlledByUser(const FilePath& base, 396 BASE_EXPORT bool VerifyPathControlledByUser(const base::FilePath& base,
388 const FilePath& path, 397 const base::FilePath& path,
389 uid_t owner_uid, 398 uid_t owner_uid,
390 const std::set<gid_t>& group_gids); 399 const std::set<gid_t>& group_gids);
391 #endif // defined(OS_POSIX) 400 #endif // defined(OS_POSIX)
392 401
393 #if defined(OS_MACOSX) && !defined(OS_IOS) 402 #if defined(OS_MACOSX) && !defined(OS_IOS)
394 // Is |path| writable only by a user with administrator privileges? 403 // Is |path| writable only by a user with administrator privileges?
395 // This function uses Mac OS conventions. The super user is assumed to have 404 // This function uses Mac OS conventions. The super user is assumed to have
396 // uid 0, and the administrator group is assumed to be named "admin". 405 // uid 0, and the administrator group is assumed to be named "admin".
397 // Testing that |path|, and every parent directory including the root of 406 // Testing that |path|, and every parent directory including the root of
398 // the filesystem, are owned by the superuser, controlled by the group 407 // the filesystem, are owned by the superuser, controlled by the group
399 // "admin", are not writable by all users, and contain no symbolic links. 408 // "admin", are not writable by all users, and contain no symbolic links.
400 // Will return false if |path| does not exist. 409 // Will return false if |path| does not exist.
401 BASE_EXPORT bool VerifyPathControlledByAdmin(const FilePath& path); 410 BASE_EXPORT bool VerifyPathControlledByAdmin(const base::FilePath& path);
402 #endif // defined(OS_MACOSX) && !defined(OS_IOS) 411 #endif // defined(OS_MACOSX) && !defined(OS_IOS)
403 412
404 // A class to handle auto-closing of FILE*'s. 413 // A class to handle auto-closing of FILE*'s.
405 class ScopedFILEClose { 414 class ScopedFILEClose {
406 public: 415 public:
407 inline void operator()(FILE* x) const { 416 inline void operator()(FILE* x) const {
408 if (x) { 417 if (x) {
409 fclose(x); 418 fclose(x);
410 } 419 }
411 } 420 }
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 // 475 //
467 // |pattern| is an optional pattern for which files to match. This 476 // |pattern| is an optional pattern for which files to match. This
468 // works like shell globbing. For example, "*.txt" or "Foo???.doc". 477 // works like shell globbing. For example, "*.txt" or "Foo???.doc".
469 // However, be careful in specifying patterns that aren't cross platform 478 // However, be careful in specifying patterns that aren't cross platform
470 // since the underlying code uses OS-specific matching routines. In general, 479 // since the underlying code uses OS-specific matching routines. In general,
471 // Windows matching is less featureful than others, so test there first. 480 // Windows matching is less featureful than others, so test there first.
472 // If unspecified, this will match all files. 481 // If unspecified, this will match all files.
473 // NOTE: the pattern only matches the contents of root_path, not files in 482 // NOTE: the pattern only matches the contents of root_path, not files in
474 // recursive subdirectories. 483 // recursive subdirectories.
475 // TODO(erikkay): Fix the pattern matching to work at all levels. 484 // TODO(erikkay): Fix the pattern matching to work at all levels.
476 FileEnumerator(const FilePath& root_path, 485 FileEnumerator(const base::FilePath& root_path,
477 bool recursive, 486 bool recursive,
478 int file_type); 487 int file_type);
479 FileEnumerator(const FilePath& root_path, 488 FileEnumerator(const base::FilePath& root_path,
480 bool recursive, 489 bool recursive,
481 int file_type, 490 int file_type,
482 const FilePath::StringType& pattern); 491 const base::FilePath::StringType& pattern);
483 ~FileEnumerator(); 492 ~FileEnumerator();
484 493
485 // Returns an empty string if there are no more results. 494 // Returns an empty string if there are no more results.
486 FilePath Next(); 495 base::FilePath Next();
487 496
488 // Write the file info into |info|. 497 // Write the file info into |info|.
489 void GetFindInfo(FindInfo* info); 498 void GetFindInfo(FindInfo* info);
490 499
491 // Looks inside a FindInfo and determines if it's a directory. 500 // Looks inside a FindInfo and determines if it's a directory.
492 static bool IsDirectory(const FindInfo& info); 501 static bool IsDirectory(const FindInfo& info);
493 502
494 static FilePath GetFilename(const FindInfo& find_info); 503 static base::FilePath GetFilename(const FindInfo& find_info);
495 static int64 GetFilesize(const FindInfo& find_info); 504 static int64 GetFilesize(const FindInfo& find_info);
496 static base::Time GetLastModifiedTime(const FindInfo& find_info); 505 static base::Time GetLastModifiedTime(const FindInfo& find_info);
497 506
498 private: 507 private:
499 // Returns true if the given path should be skipped in enumeration. 508 // Returns true if the given path should be skipped in enumeration.
500 bool ShouldSkip(const FilePath& path); 509 bool ShouldSkip(const base::FilePath& path);
501 510
502 511
503 #if defined(OS_WIN) 512 #if defined(OS_WIN)
504 // True when find_data_ is valid. 513 // True when find_data_ is valid.
505 bool has_find_data_; 514 bool has_find_data_;
506 WIN32_FIND_DATA find_data_; 515 WIN32_FIND_DATA find_data_;
507 HANDLE find_handle_; 516 HANDLE find_handle_;
508 #elif defined(OS_POSIX) 517 #elif defined(OS_POSIX)
509 struct DirectoryEntryInfo { 518 struct DirectoryEntryInfo {
510 FilePath filename; 519 base::FilePath filename;
511 struct stat stat; 520 struct stat stat;
512 }; 521 };
513 522
514 // Read the filenames in source into the vector of DirectoryEntryInfo's 523 // Read the filenames in source into the vector of DirectoryEntryInfo's
515 static bool ReadDirectory(std::vector<DirectoryEntryInfo>* entries, 524 static bool ReadDirectory(std::vector<DirectoryEntryInfo>* entries,
516 const FilePath& source, bool show_links); 525 const base::FilePath& source, bool show_links);
517 526
518 // The files in the current directory 527 // The files in the current directory
519 std::vector<DirectoryEntryInfo> directory_entries_; 528 std::vector<DirectoryEntryInfo> directory_entries_;
520 529
521 // The next entry to use from the directory_entries_ vector 530 // The next entry to use from the directory_entries_ vector
522 size_t current_directory_entry_; 531 size_t current_directory_entry_;
523 #endif 532 #endif
524 533
525 FilePath root_path_; 534 base::FilePath root_path_;
526 bool recursive_; 535 bool recursive_;
527 int file_type_; 536 int file_type_;
528 FilePath::StringType pattern_; // Empty when we want to find everything. 537 base::FilePath::StringType pattern_; // Empty when we want to find
538 // everything.
529 539
530 // A stack that keeps track of which subdirectories we still need to 540 // A stack that keeps track of which subdirectories we still need to
531 // enumerate in the breadth-first search. 541 // enumerate in the breadth-first search.
532 std::stack<FilePath> pending_paths_; 542 std::stack<base::FilePath> pending_paths_;
533 543
534 DISALLOW_COPY_AND_ASSIGN(FileEnumerator); 544 DISALLOW_COPY_AND_ASSIGN(FileEnumerator);
535 }; 545 };
536 546
537 class BASE_EXPORT MemoryMappedFile { 547 class BASE_EXPORT MemoryMappedFile {
538 public: 548 public:
539 // The default constructor sets all members to invalid/null values. 549 // The default constructor sets all members to invalid/null values.
540 MemoryMappedFile(); 550 MemoryMappedFile();
541 ~MemoryMappedFile(); 551 ~MemoryMappedFile();
542 552
543 // Opens an existing file and maps it into memory. Access is restricted to 553 // Opens an existing file and maps it into memory. Access is restricted to
544 // read only. If this object already points to a valid memory mapped file 554 // read only. If this object already points to a valid memory mapped file
545 // then this method will fail and return false. If it cannot open the file, 555 // then this method will fail and return false. If it cannot open the file,
546 // the file does not exist, or the memory mapping fails, it will return false. 556 // the file does not exist, or the memory mapping fails, it will return false.
547 // Later we may want to allow the user to specify access. 557 // Later we may want to allow the user to specify access.
548 bool Initialize(const FilePath& file_name); 558 bool Initialize(const base::FilePath& file_name);
549 // As above, but works with an already-opened file. MemoryMappedFile will take 559 // As above, but works with an already-opened file. MemoryMappedFile will take
550 // ownership of |file| and close it when done. 560 // ownership of |file| and close it when done.
551 bool Initialize(base::PlatformFile file); 561 bool Initialize(base::PlatformFile file);
552 562
553 #if defined(OS_WIN) 563 #if defined(OS_WIN)
554 // Opens an existing file and maps it as an image section. Please refer to 564 // Opens an existing file and maps it as an image section. Please refer to
555 // the Initialize function above for additional information. 565 // the Initialize function above for additional information.
556 bool InitializeAsImageSection(const FilePath& file_name); 566 bool InitializeAsImageSection(const base::FilePath& file_name);
557 #endif // OS_WIN 567 #endif // OS_WIN
558 568
559 const uint8* data() const { return data_; } 569 const uint8* data() const { return data_; }
560 size_t length() const { return length_; } 570 size_t length() const { return length_; }
561 571
562 // Is file_ a valid file handle that points to an open, memory mapped file? 572 // Is file_ a valid file handle that points to an open, memory mapped file?
563 bool IsValid() const; 573 bool IsValid() const;
564 574
565 private: 575 private:
566 // Open the given file and pass it to MapFileToMemoryInternal(). 576 // Open the given file and pass it to MapFileToMemoryInternal().
567 bool MapFileToMemory(const FilePath& file_name); 577 bool MapFileToMemory(const base::FilePath& file_name);
568 578
569 // Map the file to memory, set data_ to that memory address. Return true on 579 // Map the file to memory, set data_ to that memory address. Return true on
570 // success, false on any kind of failure. This is a helper for Initialize(). 580 // success, false on any kind of failure. This is a helper for Initialize().
571 bool MapFileToMemoryInternal(); 581 bool MapFileToMemoryInternal();
572 582
573 // Closes all open handles. Later we may want to make this public. 583 // Closes all open handles. Later we may want to make this public.
574 void CloseHandles(); 584 void CloseHandles();
575 585
576 #if defined(OS_WIN) 586 #if defined(OS_WIN)
577 // MapFileToMemoryInternal calls this function. It provides the ability to 587 // MapFileToMemoryInternal calls this function. It provides the ability to
(...skipping 24 matching lines...) Expand all
602 FILE_SYSTEM_SMB, 612 FILE_SYSTEM_SMB,
603 FILE_SYSTEM_CODA, 613 FILE_SYSTEM_CODA,
604 FILE_SYSTEM_MEMORY, // in-memory file system 614 FILE_SYSTEM_MEMORY, // in-memory file system
605 FILE_SYSTEM_CGROUP, // cgroup control. 615 FILE_SYSTEM_CGROUP, // cgroup control.
606 FILE_SYSTEM_OTHER, // any other value. 616 FILE_SYSTEM_OTHER, // any other value.
607 FILE_SYSTEM_TYPE_COUNT 617 FILE_SYSTEM_TYPE_COUNT
608 }; 618 };
609 619
610 // Attempts determine the FileSystemType for |path|. 620 // Attempts determine the FileSystemType for |path|.
611 // Returns false if |path| doesn't exist. 621 // Returns false if |path| doesn't exist.
612 BASE_EXPORT bool GetFileSystemType(const FilePath& path, FileSystemType* type); 622 BASE_EXPORT bool GetFileSystemType(const base::FilePath& path,
623 FileSystemType* type);
613 #endif 624 #endif
614 625
615 } // namespace file_util 626 } // namespace file_util
616 627
617 #endif // BASE_FILE_UTIL_H_ 628 #endif // BASE_FILE_UTIL_H_
OLDNEW
« no previous file with comments | « base/file_path.h ('k') | base/file_version_info.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698