在Dart SDK中,如何在Windows中引导“斜杠”的情况下如何获得path?

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 

什么是build议的方式来获得操作系统特定的path准备在这个操作系统中使用

PS

如果我在不同平台上运行testing代码,我会得到不同的结果。

所以,testing。

运行时间:Dart SDK版本1.1.1(稳定)

码:

 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} 

这种行为阻止我编写跨平台的代码。

此代码适用于所有平台。

 import 'dart:io'; void main() { var path = Platform.script.toFilePath(); print(path); var uri = new Uri.file(path); print(uri.toFilePath()); } 

PS

类似的异常( Illegal character in path )可以在Dart SDK(在某些情况下)中使用scheme“”dart-ext“:

 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'; ^ 

看一下路径包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 (eg `http://dartlang.org`, /// `file://`) or with "/". static final url = new UrlStyle();