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

Side by Side Diff: pkg/dev_compiler/tool/input_sdk/lib/io/directory.dart

Issue 2698353003: unfork DDC's copy of most SDK libraries (Closed)
Patch Set: revert core_patch Created 3 years, 9 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
OLDNEW
(Empty)
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 part of dart.io;
6
7 /**
8 * A reference to a directory (or _folder_) on the file system.
9 *
10 * A Directory instance is an object holding a [path] on which operations can
11 * be performed. The path to the directory can be [absolute] or [relative].
12 * You can get the parent directory using the getter [parent],
13 * a property inherited from [FileSystemEntity].
14 *
15 * In addition to being used as an instance to access the file system,
16 * Directory has a number of static properties, such as [systemTemp],
17 * which gets the system's temporary directory, and the getter and setter
18 * [current], which you can use to access or change the current directory.
19 *
20 * Create a new Directory object with a pathname to access the specified
21 * directory on the file system from your program.
22 *
23 * var myDir = new Directory('myDir');
24 *
25 * Most methods in this class occur in synchronous and asynchronous pairs,
26 * for example, [create] and [createSync].
27 * Unless you have a specific reason for using the synchronous version
28 * of a method, prefer the asynchronous version to avoid blocking your program.
29 *
30 * ## Create a directory
31 *
32 * The following code sample creates a directory using the [create] method.
33 * By setting the `recursive` parameter to true, you can create the
34 * named directory and all its necessary parent directories,
35 * if they do not already exist.
36 *
37 * import 'dart:io';
38 *
39 * void main() {
40 * // Creates dir/ and dir/subdir/.
41 * new Directory('dir/subdir').create(recursive: true)
42 * // The created directory is returned as a Future.
43 * .then((Directory directory) {
44 * print(directory.path);
45 * });
46 * }
47 *
48 * ## List a directory
49 *
50 * Use the [list] or [listSync] methods to get the files and directories
51 * contained by a directory.
52 * Set `recursive` to true to recursively list all subdirectories.
53 * Set `followLinks` to true to follow symbolic links.
54 * The list method returns a [Stream] that provides FileSystemEntity
55 * objects. Use the listen callback function to process each object
56 * as it become available.
57 *
58 * import 'dart:io';
59 *
60 * void main() {
61 * // Get the system temp directory.
62 * var systemTempDir = Directory.systemTemp;
63 *
64 * // List directory contents, recursing into sub-directories,
65 * // but not following symbolic links.
66 * systemTempDir.list(recursive: true, followLinks: false)
67 * .listen((FileSystemEntity entity) {
68 * print(entity.path);
69 * });
70 * }
71 *
72 * ## The use of Futures
73 *
74 * I/O operations can block a program for some period of time while it waits for
75 * the operation to complete. To avoid this, all
76 * methods involving I/O have an asynchronous variant which returns a [Future].
77 * This future completes when the I/O operation finishes. While the I/O
78 * operation is in progress, the Dart program is not blocked,
79 * and can perform other operations.
80 *
81 * For example,
82 * the [exists] method, which determines whether the directory exists,
83 * returns a boolean value using a Future.
84 * Use `then` to register a callback function, which is called when
85 * the value is ready.
86 *
87 * import 'dart:io';
88 *
89 * main() {
90 * final myDir = new Directory('dir');
91 * myDir.exists().then((isThere) {
92 * isThere ? print('exists') : print('non-existent');
93 * });
94 * }
95 *
96 *
97 * In addition to exists, the [stat], [rename], and
98 * other methods, return Futures.
99 *
100 * ## Other resources
101 *
102 * * [Dart by Example](https://www.dartlang.org/dart-by-example/#files-directori es-and-symlinks)
103 * provides additional task-oriented code samples that show how to use
104 * various API from the Directory class and the related [File] class.
105 *
106 * * [I/O for Command-Line
107 * Apps](https://www.dartlang.org/docs/dart-up-and-running/ch03.html#dartio--- io-for-command-line-apps)
108 * a section from _A Tour of the Dart Libraries_ covers files and directories.
109 *
110 * * [Write Command-Line Apps](https://www.dartlang.org/docs/tutorials/cmdline/) ,
111 * a tutorial about writing command-line apps, includes information about
112 * files and directories.
113 */
114 abstract class Directory implements FileSystemEntity {
115 /**
116 * Gets the path of this directory.
117 */
118 final String path;
119
120 /**
121 * Creates a [Directory] object.
122 *
123 * If [path] is a relative path, it will be interpreted relative to the
124 * current working directory (see [Directory.current]), when used.
125 *
126 * If [path] is an absolute path, it will be immune to changes to the
127 * current working directory.
128 */
129 factory Directory(String path) => new _Directory(path);
130
131 /**
132 * Create a Directory object from a URI.
133 *
134 * If [uri] cannot reference a directory this throws [UnsupportedError].
135 */
136 factory Directory.fromUri(Uri uri) => new Directory(uri.toFilePath());
137
138 /**
139 * Creates a directory object pointing to the current working
140 * directory.
141 */
142 static Directory get current => _Directory.current;
143
144 /**
145 * Returns a [Uri] representing the directory's location.
146 *
147 * The returned URI's scheme is always "file" if the entity's [path] is
148 * absolute, otherwise the scheme will be empty.
149 * The returned URI's path always ends in a slash ('/').
150 */
151 Uri get uri;
152
153 /**
154 * Sets the current working directory of the Dart process including
155 * all running isolates. The new value set can be either a [Directory]
156 * or a [String].
157 *
158 * The new value is passed to the OS's system call unchanged, so a
159 * relative path passed as the new working directory will be
160 * resolved by the OS.
161 *
162 * Note that setting the current working directory is a synchronous
163 * operation and that it changes the working directory of *all*
164 * isolates.
165 *
166 * Use this with care - especially when working with asynchronous
167 * operations and multiple isolates. Changing the working directory,
168 * while asynchronous operations are pending or when other isolates
169 * are working with the file system, can lead to unexpected results.
170 */
171 static void set current(path) {
172 _Directory.current = path;
173 }
174
175 /**
176 * Creates the directory with this name.
177 *
178 * If [recursive] is false, only the last directory in the path is
179 * created. If [recursive] is true, all non-existing path components
180 * are created. If the directory already exists nothing is done.
181 *
182 * Returns a [:Future<Directory>:] that completes with this
183 * directory once it has been created. If the directory cannot be
184 * created the future completes with an exception.
185 */
186 Future<Directory> create({bool recursive: false});
187
188 /**
189 * Synchronously creates the directory with this name.
190 *
191 * If [recursive] is false, only the last directory in the path is
192 * created. If [recursive] is true, all non-existing path components
193 * are created. If the directory already exists nothing is done.
194 *
195 * If the directory cannot be created an exception is thrown.
196 */
197 void createSync({bool recursive: false});
198
199 /**
200 * Gets the system temp directory.
201 *
202 * Gets the directory provided by the operating system for creating
203 * temporary files and directories in.
204 * The location of the system temp directory is platform-dependent,
205 * and may be set by an environment variable.
206 */
207 static Directory get systemTemp => _Directory.systemTemp;
208
209 /**
210 * Creates a temporary directory in this directory. Additional random
211 * characters are appended to [prefix] to produce a unique directory
212 * name. If [prefix] is missing or null, the empty string is used
213 * for [prefix].
214 *
215 * Returns a [:Future<Directory>:] that completes with the newly
216 * created temporary directory.
217 */
218 Future<Directory> createTemp([String prefix]);
219
220 /**
221 * Synchronously creates a temporary directory in this directory.
222 * Additional random characters are appended to [prefix] to produce
223 * a unique directory name. If [prefix] is missing or null, the empty
224 * string is used for [prefix].
225 *
226 * Returns the newly created temporary directory.
227 */
228 Directory createTempSync([String prefix]);
229
230 Future<String> resolveSymbolicLinks();
231
232 String resolveSymbolicLinksSync();
233
234 /**
235 * Renames this directory. Returns a [:Future<Directory>:] that completes
236 * with a [Directory] instance for the renamed directory.
237 *
238 * If newPath identifies an existing directory, that directory is
239 * replaced. If newPath identifies an existing file, the operation
240 * fails and the future completes with an exception.
241 */
242 Future<Directory> rename(String newPath);
243
244 /**
245 * Synchronously renames this directory. Returns a [Directory]
246 * instance for the renamed directory.
247 *
248 * If newPath identifies an existing directory, that directory is
249 * replaced. If newPath identifies an existing file the operation
250 * fails and an exception is thrown.
251 */
252 Directory renameSync(String newPath);
253
254 /**
255 * Returns a [Directory] instance whose path is the absolute path to [this].
256 *
257 * The absolute path is computed by prefixing
258 * a relative path with the current working directory, and returning
259 * an absolute path unchanged.
260 */
261 Directory get absolute;
262
263 /**
264 * Lists the sub-directories and files of this [Directory].
265 * Optionally recurses into sub-directories.
266 *
267 * If [followLinks] is false, then any symbolic links found
268 * are reported as [Link] objects, rather than as directories or files,
269 * and are not recursed into.
270 *
271 * If [followLinks] is true, then working links are reported as
272 * directories or files, depending on
273 * their type, and links to directories are recursed into.
274 * Broken links are reported as [Link] objects.
275 * If a symbolic link makes a loop in the file system, then a recursive
276 * listing will not follow a link twice in the
277 * same recursive descent, but will report it as a [Link]
278 * the second time it is seen.
279 *
280 * The result is a stream of [FileSystemEntity] objects
281 * for the directories, files, and links.
282 */
283 Stream<FileSystemEntity> list({bool recursive: false,
284 bool followLinks: true});
285
286 /**
287 * Lists the sub-directories and files of this [Directory].
288 * Optionally recurses into sub-directories.
289 *
290 * If [followLinks] is false, then any symbolic links found
291 * are reported as [Link] objects, rather than as directories or files,
292 * and are not recursed into.
293 *
294 * If [followLinks] is true, then working links are reported as
295 * directories or files, depending on
296 * their type, and links to directories are recursed into.
297 * Broken links are reported as [Link] objects.
298 * If a link makes a loop in the file system, then a recursive
299 * listing will not follow a link twice in the
300 * same recursive descent, but will report it as a [Link]
301 * the second time it is seen.
302 *
303 * Returns a [List] containing [FileSystemEntity] objects for the
304 * directories, files, and links.
305 */
306 List<FileSystemEntity> listSync({bool recursive: false,
307 bool followLinks: true});
308
309 /**
310 * Returns a human readable string for this Directory instance.
311 */
312 String toString();
313 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698