import 'dart:io';
void main() {
var path = Platform.script.path;
print(path);
}
输出
/C:/Users/user/dart/test/bin/test.dart
但我想得到
C:/Users/user/dart/test/bin/test.dart
建议在此操作系统中使用OS特定路径的方法是什么?
P.S。
如果我在不同平台上运行测试代码,我会得到不同的结果。
所以,测试。
运行时:Dart SDK版本1.1.1(STABLE)
代码:
import 'dart:io';
void main() {
var path = Platform.script.path;
print(path);
// From doc: Creates a new file URI from an absolute or relative file path.
var uri = new Uri.file(path);
print(uri.path);
}
Ubuntu 13.10:
/home/andrew/dart/test/bin/test.dart
/home/andrew/dart/test/bin/test.dart
Windows 7:
/C:/Users/user/dart/test/bin/test.dart
Breaking on exception: Illegal argument(s): Illegal character in path}
Unhandled exception:
Illegal argument(s): Illegal character in path}
此行为阻止我编写跨平台代码。
答案 0 :(得分:2)
此代码适用于所有平台。
import 'dart:io';
void main() {
var path = Platform.script.toFilePath();
print(path);
var uri = new Uri.file(path);
print(uri.toFilePath());
}
P.S。
当使用scheme“”dart-ext“时,在Dart SDK内部(在某些情况下)会发生类似的异常(Illegal character in path
):
Unhandled exception:
Unsupported operation: Illegal character in path}
#0 Uri._checkWindowsPathReservedCharacters.<anonymous closure> (dart:core/uri.dart:395)
#1 ListIterable.forEach (dart:_collection-dev/iterable.dart:39)
#2 Uri._checkWindowsPathReservedCharacters (dart:core/uri.dart:390)
#3 Uri._toWindowsFilePath (dart:core/uri.dart:1018)
#4 Uri.toFilePath (dart:core/uri.dart:992)
#5 _filePathFromUri (dart:builtin:249)
'package:dart_and_cpp_classes/src/cpp_extension.dart': error: line 3 pos 1: library handler failed
import "dart-ext:cpp_extension";
^
'package:dart_and_cpp_classes/cpp_extension.dart': error: line 3 pos 1: library handler failed
import 'package:dart_and_cpp_classes/src/cpp_extension.dart';
^
'file:///C:/Users/user/dart/dart_and_cpp_classes/bin/use_cpp_extension.dart': error: line 1 pos 1: library handler failed
import 'package:dart_and_cpp_classes/cpp_extension.dart';
^
答案 1 :(得分:1)
查看路径包import package:path/path.dart
我没有在这里运行Windows,所以我无法验证任何内容。
经过短暂的审视,我发现:
/// An enum type describing a "flavor" of path.
abstract class Style {
/// POSIX-style paths use "/" (forward slash) as separators. Absolute paths
/// start with "/". Used by UNIX, Linux, Mac OS X, and others.
static final posix = new PosixStyle();
/// Windows paths use "\" (backslash) as separators. Absolute paths start with
/// a drive letter followed by a colon (example, "C:") or two backslashes
/// ("\\") for UNC paths.
// TODO(rnystrom): The UNC root prefix should include the drive name too, not
// just the "\\".
static final windows = new WindowsStyle();
/// URLs aren't filesystem paths, but they're supported to make it easier to
/// manipulate URL paths in the browser.
///
/// URLs use "/" (forward slash) as separators. Absolute paths either start
/// with a protocol and optional hostname (e.g. `http://dartlang.org`,
/// `file://`) or with "/".
static final url = new UrlStyle();