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

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

Issue 20745006: Add a flush operations to IOSink (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 4 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 // Read the file in blocks of size 64k. 7 // Read the file in blocks of size 64k.
8 const int _BLOCK_SIZE = 64 * 1024; 8 const int _BLOCK_SIZE = 64 * 1024;
9 9
10 10
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 }) 189 })
190 .catchError((e) { 190 .catchError((e) {
191 completer.completeError(e); 191 completer.completeError(e);
192 }); 192 });
193 return completer.future; 193 return completer.future;
194 } 194 }
195 195
196 Future<File> close() { 196 Future<File> close() {
197 return _openFuture.then((openedFile) => openedFile.close()); 197 return _openFuture.then((openedFile) => openedFile.close());
198 } 198 }
199
200 Future flush() {
201 return _openFuture
202 .then((openedFile) => openedFile.flush())
203 .then((randomAccessfile) => new Future.value(null));
204 }
199 } 205 }
200 206
201 207
202 const int _EXISTS_REQUEST = 0; 208 const int _EXISTS_REQUEST = 0;
203 const int _CREATE_REQUEST = 1; 209 const int _CREATE_REQUEST = 1;
204 const int _DELETE_REQUEST = 2; 210 const int _DELETE_REQUEST = 2;
205 const int _RENAME_REQUEST = 3; 211 const int _RENAME_REQUEST = 3;
206 const int _OPEN_REQUEST = 4; 212 const int _OPEN_REQUEST = 4;
207 const int _FULL_PATH_REQUEST = 5; 213 const int _FULL_PATH_REQUEST = 5;
208 const int _CLOSE_REQUEST = 6; 214 const int _CLOSE_REQUEST = 6;
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 return readAsBytes().then((bytes) { 539 return readAsBytes().then((bytes) {
534 return _decodeLines(bytes, encoding); 540 return _decodeLines(bytes, encoding);
535 }); 541 });
536 } 542 }
537 543
538 List<String> readAsLinesSync({Encoding encoding: Encoding.UTF_8}) { 544 List<String> readAsLinesSync({Encoding encoding: Encoding.UTF_8}) {
539 return _decodeLines(readAsBytesSync(), encoding); 545 return _decodeLines(readAsBytesSync(), encoding);
540 } 546 }
541 547
542 Future<File> writeAsBytes(List<int> bytes, 548 Future<File> writeAsBytes(List<int> bytes,
543 {FileMode mode: FileMode.WRITE}) { 549 {FileMode mode: FileMode.WRITE,
550 bool flush: false}) {
544 try { 551 try {
545 IOSink sink = openWrite(mode: mode); 552 IOSink sink = openWrite(mode: mode);
546 sink.add(bytes); 553 sink.add(bytes);
547 sink.close(); 554 if (flush) {
555 sink.flush().then((_) => sink.close());
556 } else {
557 sink.close();
558 }
548 return sink.done.then((_) => this); 559 return sink.done.then((_) => this);
549 } catch (e) { 560 } catch (e) {
550 return new Future.error(e); 561 return new Future.error(e);
551 } 562 }
552 } 563 }
553 564
554 void writeAsBytesSync(List<int> bytes, {FileMode mode: FileMode.WRITE}) { 565 void writeAsBytesSync(List<int> bytes,
566 {FileMode mode: FileMode.WRITE,
567 bool flush: false}) {
555 RandomAccessFile opened = openSync(mode: mode); 568 RandomAccessFile opened = openSync(mode: mode);
556 opened.writeFromSync(bytes, 0, bytes.length); 569 opened.writeFromSync(bytes, 0, bytes.length);
570 if (flush) opened.flushSync();
557 opened.closeSync(); 571 opened.closeSync();
558 } 572 }
559 573
560 Future<File> writeAsString(String contents, 574 Future<File> writeAsString(String contents,
561 {FileMode mode: FileMode.WRITE, 575 {FileMode mode: FileMode.WRITE,
562 Encoding encoding: Encoding.UTF_8}) { 576 Encoding encoding: Encoding.UTF_8,
577 bool flush: false}) {
563 try { 578 try {
564 return writeAsBytes(_encodeString(contents, encoding), mode: mode); 579 return writeAsBytes(
580 _encodeString(contents, encoding), mode: mode, flush: flush);
565 } catch (e) { 581 } catch (e) {
566 return new Future.error(e); 582 return new Future.error(e);
567 } 583 }
568 } 584 }
569 585
570 void writeAsStringSync(String contents, 586 void writeAsStringSync(String contents,
571 {FileMode mode: FileMode.WRITE, 587 {FileMode mode: FileMode.WRITE,
572 Encoding encoding: Encoding.UTF_8}) { 588 Encoding encoding: Encoding.UTF_8,
573 writeAsBytesSync(_encodeString(contents, encoding), mode: mode); 589 bool flush: false}) {
590 writeAsBytesSync(
591 _encodeString(contents, encoding), mode: mode, flush: flush);
574 } 592 }
575 593
576 String get path => _path; 594 String get path => _path;
577 595
578 String toString() => "File: '$path'"; 596 String toString() => "File: '$path'";
579 597
580 void _ensureFileService() { 598 void _ensureFileService() {
581 if (_fileService == null) { 599 if (_fileService == null) {
582 _fileService = _FileUtils._newServicePort(); 600 _fileService = _FileUtils._newServicePort();
583 } 601 }
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
986 1004
987 Future _closedException() { 1005 Future _closedException() {
988 return new Future.error(new FileException("File closed", _path)); 1006 return new Future.error(new FileException("File closed", _path));
989 } 1007 }
990 1008
991 final String _path; 1009 final String _path;
992 int _id; 1010 int _id;
993 1011
994 SendPort _fileService; 1012 SendPort _fileService;
995 } 1013 }
OLDNEW
« no previous file with comments | « sdk/lib/io/file.dart ('k') | sdk/lib/io/io_sink.dart » ('j') | sdk/lib/io/io_sink.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698