-
floitsch@google.com authored
Review URL: https://codereview.chromium.org//12380019 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge@19221 260f80e4-7a28-3924-810f-c04153c831b5
d8857d34
io.dart 30.03 KiB
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
/// Helper functionality to make working with IO easier.
library io;
import 'dart:async';
import 'dart:io';
import 'dart:isolate';
import 'dart:json';
import 'dart:uri';
import '../../pkg/pathos/lib/path.dart' as path;
import '../../pkg/http/lib/http.dart' show ByteStream;
import 'error_group.dart';
import 'exit_codes.dart' as exit_codes;
import 'log.dart' as log;
import 'utils.dart';
export '../../pkg/http/lib/http.dart' show ByteStream;
final NEWLINE_PATTERN = new RegExp("\r\n?|\n\r?");
/// Returns whether or not [entry] is nested somewhere within [dir]. This just
/// performs a path comparison; it doesn't look at the actual filesystem.
bool isBeneath(String entry, String dir) {
var relative = path.relative(entry, from: dir);
return !path.isAbsolute(relative) && path.split(relative)[0] != '..';
}
/// Determines if a file or directory at [path] exists.
bool entryExists(String path) => fileExists(path) || dirExists(path);
/// Determines if [file] exists on the file system.
bool fileExists(String file) => new File(file).existsSync();
/// Reads the contents of the text file [file].
String readTextFile(String file) =>
new File(file).readAsStringSync(Encoding.UTF_8);
/// Reads the contents of the binary file [file].
List<int> readBinaryFile(String file) {
log.io("Reading binary file $file.");
var contents = new File(file).readAsBytesSync();
log.io("Read ${contents.length} bytes from $file.");
return contents;
}
/// Creates [file] and writes [contents] to it.
///
/// If [dontLogContents] is true, the contents of the file will never be logged.
String writeTextFile(String file, String contents, {dontLogContents: false}) {
// Sanity check: don't spew a huge file.
log.io("Writing ${contents.length} characters to text file $file.");
if (!dontLogContents && contents.length < 1024 * 1024) {
log.fine("Contents:\n$contents");
}
new File(file).writeAsStringSync(contents);
return file;
}
/// Deletes [file].
void deleteFile(String file) {
new File(file).delete();
}
/// Creates [file] and writes [contents] to it.
String writeBinaryFile(String file, List<int> contents) {