3
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 で使用できるように OS 固有のパスを取得するための推奨される方法は何ですか?

PS

異なるプラットフォームでテスト コードを実行すると、異なる結果が得られます。

それで、テストします。

ランタイム: 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}

この動作により、クロスプラットフォームのコードを書くことができなくなります。

4

2 に答える 2

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();
于 2014-01-19T00:11:54.410 に答える