OLD | NEW |
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 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 // May be character device, try to read it in chunks. | 454 // May be character device, try to read it in chunks. |
455 return readDataChunked(file); | 455 return readDataChunked(file); |
456 } | 456 } |
457 return file.read(length); | 457 return file.read(length); |
458 }).whenComplete(file.close); | 458 }).whenComplete(file.close); |
459 }); | 459 }); |
460 } | 460 } |
461 | 461 |
462 List<int> readAsBytesSync() { | 462 List<int> readAsBytesSync() { |
463 var opened = openSync(); | 463 var opened = openSync(); |
464 var data; | 464 try { |
465 var length = opened.lengthSync(); | 465 var data; |
466 if (length == 0) { | 466 var length = opened.lengthSync(); |
467 // May be character device, try to read it in chunks. | 467 if (length == 0) { |
468 var builder = new BytesBuilder(copy: false); | 468 // May be character device, try to read it in chunks. |
469 do { | 469 var builder = new BytesBuilder(copy: false); |
470 data = opened.readSync(_BLOCK_SIZE); | 470 do { |
471 if (data.length > 0) builder.add(data); | 471 data = opened.readSync(_BLOCK_SIZE); |
472 } while (data.length == _BLOCK_SIZE); | 472 if (data.length > 0) builder.add(data); |
473 data = builder.takeBytes(); | 473 } while (data.length == _BLOCK_SIZE); |
474 } else { | 474 data = builder.takeBytes(); |
475 data = opened.readSync(length); | 475 } else { |
| 476 data = opened.readSync(length); |
| 477 } |
| 478 return data; |
| 479 } finally { |
| 480 opened.closeSync(); |
476 } | 481 } |
477 opened.closeSync(); | |
478 return data; | |
479 } | 482 } |
480 | 483 |
481 String _tryDecode(List<int> bytes, Encoding encoding) { | 484 String _tryDecode(List<int> bytes, Encoding encoding) { |
482 try { | 485 try { |
483 return encoding.decode(bytes); | 486 return encoding.decode(bytes); |
484 } catch (_) { | 487 } catch (_) { |
485 throw new FileSystemException( | 488 throw new FileSystemException( |
486 "Failed to decode data using encoding '${encoding.name}'", path); | 489 "Failed to decode data using encoding '${encoding.name}'", path); |
487 } | 490 } |
488 } | 491 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
532 return this; | 535 return this; |
533 }) | 536 }) |
534 .whenComplete(file.close); | 537 .whenComplete(file.close); |
535 }); | 538 }); |
536 } | 539 } |
537 | 540 |
538 void writeAsBytesSync(List<int> bytes, | 541 void writeAsBytesSync(List<int> bytes, |
539 {FileMode mode: FileMode.WRITE, | 542 {FileMode mode: FileMode.WRITE, |
540 bool flush: false}) { | 543 bool flush: false}) { |
541 RandomAccessFile opened = openSync(mode: mode); | 544 RandomAccessFile opened = openSync(mode: mode); |
542 opened.writeFromSync(bytes, 0, bytes.length); | 545 try { |
543 if (flush) opened.flushSync(); | 546 opened.writeFromSync(bytes, 0, bytes.length); |
544 opened.closeSync(); | 547 if (flush) opened.flushSync(); |
| 548 } finally { |
| 549 opened.closeSync(); |
| 550 } |
545 } | 551 } |
546 | 552 |
547 Future<File> writeAsString(String contents, | 553 Future<File> writeAsString(String contents, |
548 {FileMode mode: FileMode.WRITE, | 554 {FileMode mode: FileMode.WRITE, |
549 Encoding encoding: UTF8, | 555 Encoding encoding: UTF8, |
550 bool flush: false}) { | 556 bool flush: false}) { |
551 try { | 557 try { |
552 return writeAsBytes(encoding.encode(contents), mode: mode, flush: flush); | 558 return writeAsBytes(encoding.encode(contents), mode: mode, flush: flush); |
553 } catch (e) { | 559 } catch (e) { |
554 return new Future.error(e); | 560 return new Future.error(e); |
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
915 void _checkAvailable() { | 921 void _checkAvailable() { |
916 if (_asyncDispatched) { | 922 if (_asyncDispatched) { |
917 throw new FileSystemException("An async operation is currently pending", | 923 throw new FileSystemException("An async operation is currently pending", |
918 path); | 924 path); |
919 } | 925 } |
920 if (closed) { | 926 if (closed) { |
921 throw new FileSystemException("File closed", path); | 927 throw new FileSystemException("File closed", path); |
922 } | 928 } |
923 } | 929 } |
924 } | 930 } |
OLD | NEW |