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

Side by Side Diff: sdk/lib/io/file_impl.dart

Issue 12609004: Change all File APIs to make the mode and encoding arguments named (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart.io; 5 part of dart.io;
6 6
7 7
8 class _FileStream extends Stream<List<int>> { 8 class _FileStream extends Stream<List<int>> {
9 // Stream controller. 9 // Stream controller.
10 StreamController<List<int>> _controller; 10 StreamController<List<int>> _controller;
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 _controller.addError(e); 97 _controller.addError(e);
98 _closeFile().then((_) { _controller.close(); }); 98 _closeFile().then((_) { _controller.close(); });
99 _unsubscribed = true; 99 _unsubscribed = true;
100 } 100 }
101 }); 101 });
102 } 102 }
103 103
104 void _start() { 104 void _start() {
105 Future<RandomAccessFile> openFuture; 105 Future<RandomAccessFile> openFuture;
106 if (_path != null) { 106 if (_path != null) {
107 openFuture = new File(_path).open(FileMode.READ); 107 openFuture = new File(_path).open(mode: FileMode.READ);
108 } else { 108 } else {
109 openFuture = new Future.immediate(_File._openStdioSync(0)); 109 openFuture = new Future.immediate(_File._openStdioSync(0));
110 } 110 }
111 openFuture 111 openFuture
112 .then((RandomAccessFile opened) { 112 .then((RandomAccessFile opened) {
113 _openedFile = opened; 113 _openedFile = opened;
114 _readBlock(); 114 _readBlock();
115 }) 115 })
116 .catchError((e) { 116 .catchError((e) {
117 _controller.addError(e); 117 _controller.addError(e);
(...skipping 28 matching lines...) Expand all
146 } 146 }
147 } 147 }
148 } 148 }
149 149
150 class _FileStreamConsumer extends StreamConsumer<List<int>, File> { 150 class _FileStreamConsumer extends StreamConsumer<List<int>, File> {
151 File _file; 151 File _file;
152 Future<RandomAccessFile> _openFuture; 152 Future<RandomAccessFile> _openFuture;
153 StreamSubscription _subscription; 153 StreamSubscription _subscription;
154 154
155 _FileStreamConsumer(File this._file, FileMode mode) { 155 _FileStreamConsumer(File this._file, FileMode mode) {
156 _openFuture = _file.open(mode); 156 _openFuture = _file.open(mode: mode);
157 } 157 }
158 158
159 _FileStreamConsumer.fromStdio(int fd) { 159 _FileStreamConsumer.fromStdio(int fd) {
160 assert(1 <= fd && fd <= 2); 160 assert(1 <= fd && fd <= 2);
161 _openFuture = new Future.immediate(_File._openStdioSync(fd)); 161 _openFuture = new Future.immediate(_File._openStdioSync(fd));
162 } 162 }
163 163
164 Future<File> consume(Stream<List<int>> stream) { 164 Future<File> consume(Stream<List<int>> stream) {
165 Completer<File> completer = new Completer<File>(); 165 Completer<File> completer = new Completer<File>();
166 _openFuture 166 _openFuture
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 } 340 }
341 341
342 external static _directory(String path); 342 external static _directory(String path);
343 343
344 Directory directorySync() { 344 Directory directorySync() {
345 var result = _directory(path); 345 var result = _directory(path);
346 throwIfError(result, "Cannot retrieve directory for file '$_path'"); 346 throwIfError(result, "Cannot retrieve directory for file '$_path'");
347 return new Directory(result); 347 return new Directory(result);
348 } 348 }
349 349
350 Future<RandomAccessFile> open([FileMode mode = FileMode.READ]) { 350 Future<RandomAccessFile> open({FileMode mode: FileMode.READ}) {
351 _ensureFileService(); 351 _ensureFileService();
352 Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>(); 352 Completer<RandomAccessFile> completer = new Completer<RandomAccessFile>();
353 if (mode != FileMode.READ && 353 if (mode != FileMode.READ &&
354 mode != FileMode.WRITE && 354 mode != FileMode.WRITE &&
355 mode != FileMode.APPEND) { 355 mode != FileMode.APPEND) {
356 Timer.run(() { 356 Timer.run(() {
357 completer.completeError(new ArgumentError()); 357 completer.completeError(new ArgumentError());
358 }); 358 });
359 return completer.future; 359 return completer.future;
360 } 360 }
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 external static _lastModified(String path); 412 external static _lastModified(String path);
413 413
414 DateTime lastModifiedSync() { 414 DateTime lastModifiedSync() {
415 var ms = _lastModified(path); 415 var ms = _lastModified(path);
416 throwIfError(ms, "Cannot retrieve modification time for file '$_path'"); 416 throwIfError(ms, "Cannot retrieve modification time for file '$_path'");
417 return new DateTime.fromMillisecondsSinceEpoch(ms); 417 return new DateTime.fromMillisecondsSinceEpoch(ms);
418 } 418 }
419 419
420 external static _open(String path, int mode); 420 external static _open(String path, int mode);
421 421
422 RandomAccessFile openSync([FileMode mode = FileMode.READ]) { 422 RandomAccessFile openSync({FileMode mode: FileMode.READ}) {
423 if (mode != FileMode.READ && 423 if (mode != FileMode.READ &&
424 mode != FileMode.WRITE && 424 mode != FileMode.WRITE &&
425 mode != FileMode.APPEND) { 425 mode != FileMode.APPEND) {
426 throw new FileIOException("Unknown file mode. Use FileMode.READ, " 426 throw new FileIOException("Unknown file mode. Use FileMode.READ, "
427 "FileMode.WRITE or FileMode.APPEND."); 427 "FileMode.WRITE or FileMode.APPEND.");
428 } 428 }
429 var id = _open(_path, mode._mode); 429 var id = _open(_path, mode._mode);
430 throwIfError(id, "Cannot open file '$_path'"); 430 throwIfError(id, "Cannot open file '$_path'");
431 return new _RandomAccessFile(id, _path); 431 return new _RandomAccessFile(id, _path);
432 } 432 }
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 var length = opened.lengthSync(); 502 var length = opened.lengthSync();
503 var result = new Uint8List(length); 503 var result = new Uint8List(length);
504 var read = opened.readListSync(result, 0, length); 504 var read = opened.readListSync(result, 0, length);
505 if (read != length) { 505 if (read != length) {
506 throw new FileIOException("Failed to read file"); 506 throw new FileIOException("Failed to read file");
507 } 507 }
508 opened.closeSync(); 508 opened.closeSync();
509 return result; 509 return result;
510 } 510 }
511 511
512 Future<String> readAsString([Encoding encoding = Encoding.UTF_8]) { 512 Future<String> readAsString({Encoding encoding: Encoding.UTF_8}) {
513 _ensureFileService(); 513 _ensureFileService();
514 return readAsBytes().then((bytes) { 514 return readAsBytes().then((bytes) {
515 return _decodeString(bytes, encoding); 515 return _decodeString(bytes, encoding);
516 }); 516 });
517 } 517 }
518 518
519 String readAsStringSync([Encoding encoding = Encoding.UTF_8]) { 519 String readAsStringSync({Encoding encoding: Encoding.UTF_8}) {
520 List<int> bytes = readAsBytesSync(); 520 List<int> bytes = readAsBytesSync();
521 return _decodeString(bytes, encoding); 521 return _decodeString(bytes, encoding);
522 } 522 }
523 523
524 static List<String> _decodeLines(List<int> bytes, Encoding encoding) { 524 static List<String> _decodeLines(List<int> bytes, Encoding encoding) {
525 if (bytes.length == 0) return []; 525 if (bytes.length == 0) return [];
526 var list = []; 526 var list = [];
527 var controller = new StreamController(); 527 var controller = new StreamController();
528 controller.stream 528 controller.stream
529 .transform(new StringDecoder(encoding)) 529 .transform(new StringDecoder(encoding))
530 .transform(new LineTransformer()) 530 .transform(new LineTransformer())
531 .listen((line) => list.add(line)); 531 .listen((line) => list.add(line));
532 controller.add(bytes); 532 controller.add(bytes);
533 controller.close(); 533 controller.close();
534 return list; 534 return list;
535 } 535 }
536 536
537 Future<List<String>> readAsLines([Encoding encoding = Encoding.UTF_8]) { 537 Future<List<String>> readAsLines({Encoding encoding: Encoding.UTF_8}) {
538 _ensureFileService(); 538 _ensureFileService();
539 Completer<List<String>> completer = new Completer<List<String>>(); 539 Completer<List<String>> completer = new Completer<List<String>>();
540 return readAsBytes().then((bytes) { 540 return readAsBytes().then((bytes) {
541 return _decodeLines(bytes, encoding); 541 return _decodeLines(bytes, encoding);
542 }); 542 });
543 } 543 }
544 544
545 List<String> readAsLinesSync([Encoding encoding = Encoding.UTF_8]) { 545 List<String> readAsLinesSync({Encoding encoding: Encoding.UTF_8}) {
546 return _decodeLines(readAsBytesSync(), encoding); 546 return _decodeLines(readAsBytesSync(), encoding);
547 } 547 }
548 548
549 Future<File> writeAsBytes(List<int> bytes, 549 Future<File> writeAsBytes(List<int> bytes,
550 [FileMode mode = FileMode.WRITE]) { 550 {FileMode mode: FileMode.WRITE}) {
551 try { 551 try {
552 IOSink<File> sink = openWrite(mode: mode); 552 IOSink<File> sink = openWrite(mode: mode);
553 sink.writeBytes(bytes); 553 sink.writeBytes(bytes);
554 sink.close(); 554 sink.close();
555 return sink.done.then((_) => this);; 555 return sink.done.then((_) => this);;
556 } catch (e) { 556 } catch (e) {
557 return new Future.immediateError(e); 557 return new Future.immediateError(e);
558 } 558 }
559 } 559 }
560 560
561 void writeAsBytesSync(List<int> bytes, [FileMode mode = FileMode.WRITE]) { 561 void writeAsBytesSync(List<int> bytes, {FileMode mode: FileMode.WRITE}) {
562 RandomAccessFile opened = openSync(mode); 562 RandomAccessFile opened = openSync(mode: mode);
563 opened.writeListSync(bytes, 0, bytes.length); 563 opened.writeListSync(bytes, 0, bytes.length);
564 opened.closeSync(); 564 opened.closeSync();
565 } 565 }
566 566
567 Future<File> writeAsString(String contents, 567 Future<File> writeAsString(String contents,
568 {FileMode mode: FileMode.WRITE, 568 {FileMode mode: FileMode.WRITE,
569 Encoding encoding: Encoding.UTF_8}) { 569 Encoding encoding: Encoding.UTF_8}) {
570 try { 570 try {
571 return writeAsBytes(_encodeString(contents, encoding), mode); 571 return writeAsBytes(_encodeString(contents, encoding), mode: mode);
572 } catch (e) { 572 } catch (e) {
573 var completer = new Completer(); 573 var completer = new Completer();
574 Timer.run(() => completer.completeError(e)); 574 Timer.run(() => completer.completeError(e));
575 return completer.future; 575 return completer.future;
576 } 576 }
577 } 577 }
578 578
579 void writeAsStringSync(String contents, 579 void writeAsStringSync(String contents,
580 {FileMode mode: FileMode.WRITE, 580 {FileMode mode: FileMode.WRITE,
581 Encoding encoding: Encoding.UTF_8}) { 581 Encoding encoding: Encoding.UTF_8}) {
582 writeAsBytesSync(_encodeString(contents, encoding), mode); 582 writeAsBytesSync(_encodeString(contents, encoding), mode: mode);
583 } 583 }
584 584
585 String get path => _path; 585 String get path => _path;
586 586
587 String toString() => "File: '$path'"; 587 String toString() => "File: '$path'";
588 588
589 void _ensureFileService() { 589 void _ensureFileService() {
590 if (_fileService == null) { 590 if (_fileService == null) {
591 _fileService = _FileUtils._newServicePort(); 591 _fileService = _FileUtils._newServicePort();
592 } 592 }
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 _ensureFastAndSerializableBuffer(buffer, offset, bytes); 856 _ensureFastAndSerializableBuffer(buffer, offset, bytes);
857 var result = 857 var result =
858 _writeList(_id, bufferAndOffset.buffer, bufferAndOffset.offset, bytes); 858 _writeList(_id, bufferAndOffset.buffer, bufferAndOffset.offset, bytes);
859 if (result is OSError) { 859 if (result is OSError) {
860 throw new FileIOException("writeList failed for file '$_path'", result); 860 throw new FileIOException("writeList failed for file '$_path'", result);
861 } 861 }
862 return result; 862 return result;
863 } 863 }
864 864
865 Future<RandomAccessFile> writeString(String string, 865 Future<RandomAccessFile> writeString(String string,
866 [Encoding encoding = Encoding.UTF_8]) { 866 {Encoding encoding: Encoding.UTF_8}) {
867 if (encoding is! Encoding) { 867 if (encoding is! Encoding) {
868 var completer = new Completer(); 868 var completer = new Completer();
869 Timer.run(() { 869 Timer.run(() {
870 completer.completeError(new FileIOException( 870 completer.completeError(new FileIOException(
871 "Invalid encoding in writeString: $encoding")); 871 "Invalid encoding in writeString: $encoding"));
872 }); 872 });
873 return completer.future; 873 return completer.future;
874 } 874 }
875 var data = _encodeString(string, encoding); 875 var data = _encodeString(string, encoding);
876 return writeList(data, 0, data.length); 876 return writeList(data, 0, data.length);
877 } 877 }
878 878
879 int writeStringSync(String string, [Encoding encoding = Encoding.UTF_8]) { 879 int writeStringSync(String string, {Encoding encoding: Encoding.UTF_8}) {
880 if (encoding is! Encoding) { 880 if (encoding is! Encoding) {
881 throw new FileIOException( 881 throw new FileIOException(
882 "Invalid encoding in writeStringSync: $encoding"); 882 "Invalid encoding in writeStringSync: $encoding");
883 } 883 }
884 var data = _encodeString(string, encoding); 884 var data = _encodeString(string, encoding);
885 return writeListSync(data, 0, data.length); 885 return writeListSync(data, 0, data.length);
886 } 886 }
887 887
888 Future<int> position() { 888 Future<int> position() {
889 _ensureFileService(); 889 _ensureFileService();
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
1041 new FileIOException("File closed '$_path'")); 1041 new FileIOException("File closed '$_path'"));
1042 }); 1042 });
1043 return completer.future; 1043 return completer.future;
1044 } 1044 }
1045 1045
1046 final String _path; 1046 final String _path;
1047 int _id; 1047 int _id;
1048 1048
1049 SendPort _fileService; 1049 SendPort _fileService;
1050 } 1050 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698