Files
sdk/utils/lib/file_system.dart
T
terry@google.com 91dd628bd8 More changes for CSS to run under VM.
Need unique name for library collision with template parser.

Few more changes to work under VM.

More changes for lang.dart seperation.

Seperation from lang.dart (tokenizer can't access private fields of base class in another library).  This was allowed in frog but not in the VM.  VM is right so need to sever dependency.

BUG=
TEST=

Review URL: https://chromiumcodereview.appspot.com//9695048

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@5544 260f80e4-7a28-3924-810f-c04153c831b5
2012-03-15 21:19:54 +00:00

76 lines
2.0 KiB
Dart

// 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.
// TODO(terry): Investigate common library for file I/O shared between frog and tools.
/** Abstraction for file systems and utility functions to manipulate paths. */
#library('file_system');
/**
* Abstraction around file system access to work in a variety of different
* environments.
*/
interface FileSystem {
String readAll(String filename);
void writeString(String outfile, String text);
bool fileExists(String filename);
void createDirectory(String path, [bool recursive]);
void removeDirectory(String path, [bool recursive]);
}
/**
* Replaces all back slashes (\) with forward slashes (/) in [path] and
* return the result.
*/
String canonicalizePath(String path) {
return path.replaceAll('\\', '/');
}
/** Join [path1] to [path2]. */
String joinPaths(String path1, String path2) {
path1 = canonicalizePath(path1);
path2 = canonicalizePath(path2);
var pieces = path1.split('/');
for (var piece in path2.split('/')) {
if (piece == '..' && pieces.length > 0 && pieces.last() != '.'
&& pieces.last() != '..') {
pieces.removeLast();
} else if (piece != '') {
if (pieces.length > 0 && pieces.last() == '.') {
pieces.removeLast();
}
pieces.add(piece);
}
}
return Strings.join(pieces, '/');
}
/** Returns the directory name for the [path]. */
String dirname(String path) {
path = canonicalizePath(path);
int lastSlash = path.lastIndexOf('/', path.length);
if (lastSlash == -1) {
return '.';
} else {
return path.substring(0, lastSlash);
}
}
/** Returns the file name without directory for the [path]. */
String basename(String path) {
path = canonicalizePath(path);
int lastSlash = path.lastIndexOf('/', path.length);
if (lastSlash == -1) {
return path;
} else {
return path.substring(lastSlash + 1);
}
}