Index: sdk/lib/io/file_impl.dart |
diff --git a/sdk/lib/io/file_impl.dart b/sdk/lib/io/file_impl.dart |
index 8e826aaeba28de179dab043c92098386f880821f..26e3f74665cdd9d49305fb188a9fd2b6696c5bba 100644 |
--- a/sdk/lib/io/file_impl.dart |
+++ b/sdk/lib/io/file_impl.dart |
@@ -660,6 +660,54 @@ class _File extends _FileBase implements File { |
return _getDecodedLines(decoder); |
} |
+ Future<File> writeAsBytes(List<int> bytes, |
+ [FileMode mode = FileMode.WRITE]) { |
+ Completer<File> completer = new Completer<File>(); |
+ try { |
+ var stream = openOutputStream(mode); |
+ stream.write(bytes); |
Søren Gjesse
2012/11/20 13:23:34
You could just do stream.close() right after strea
|
+ stream.onNoPendingWrites = () { |
+ stream.close(); |
+ stream.onClosed = () { |
+ completer.complete(this); |
+ }; |
+ }; |
+ stream.onError = (e) { |
+ completer.completeException(e); |
+ }; |
+ } catch (e) { |
+ new Timer(0, (t) => completer.completeException(e)); |
+ return completer.future; |
+ } |
+ return completer.future; |
+ } |
+ |
+ void writeAsBytesSync(List<int> bytes, [FileMode mode = FileMode.WRITE]) { |
+ RandomAccessFile opened = openSync(mode); |
+ opened.writeListSync(bytes, 0, bytes.length); |
+ opened.closeSync(); |
+ } |
+ |
+ Future<File> writeAsString(String contents, |
+ [FileMode mode = FileMode.WRITE, |
+ Encoding encoding = Encoding.UTF_8]) { |
+ try { |
+ var data = _StringEncoders.encoder(encoding).encodeString(contents); |
+ return writeAsBytes(data, mode); |
+ } catch (e) { |
+ var completer = new Completer(); |
+ new Timer(0, (t) => completer.completeException(e)); |
+ return completer.future; |
+ } |
+ } |
+ |
+ void writeAsStringSync(String contents, |
+ [FileMode mode = FileMode.WRITE, |
+ Encoding encoding = Encoding.UTF_8]) { |
+ var data = _StringEncoders.encoder(encoding).encodeString(contents); |
+ writeAsBytesSync(data, mode); |
+ } |
+ |
String get name => _name; |
void _ensureFileService() { |