2

Dartでライブラリを作成していますが、ライブラリフォルダの下に静的ファイルがあります。それらのファイルを読み取れるようにしたいのですが、そのファイルへのパスを取得する方法がわかりません...他のいくつ__FILE__$0の言語にはありません。

更新:私は十分に明確ではなかったようです。これが私を理解するのに役立ちます:

test.dart

import 'foo.dart';

void main() {
  print(Foo.getMyPath());
}

foo.dart

library asd;

class Foo {
  static Path getMyPath() => new Path('resources/');
}

間違ったフォルダの場所が表示されます。+へのパスが表示されますが、test.dart+resources/へのパスが必要です。foo.dartresources/

4

3 に答える 3

4

前述のように、ミラーを使用できます。達成したいことを使用した例を次に示します。

test.dart

import 'foo.dart';

void main() {
  print(Foo.getMyPath());
}

foo.dart

library asd;

import 'dart:mirrors';

class Foo {
  static Path getMyPath() => new Path('${currentMirrorSystem().libraries['asd'].url}/resources/');
}

次のように出力されます。

/ Users / Kai / test / lib / resources /

将来のリリースでこれを行うためのより良い方法があるでしょう。その場合は回答を更新します。

更新:ライブラリでプライベートメソッドを定義することもできます。

/**
 * Returns the path to the root of this library.
 */
_getRootPath() {
  var pathString = new Path(currentMirrorSystem().libraries['LIBNAME'].url).directoryPath.toString().replaceFirst('file:///', '');
  return pathString;
}
于 2012-10-02T16:00:22.407 に答える
2

Dart ミラー API (まだ実験段階であり、まだ dart2js などのすべてのプラットフォームで使用できるわけではありません) は、LibraryMirrorでURLゲッターを公開します。これにより、必要なものが得られるはずです。

ライブラリでこの情報を取得する他の方法を知りません。

#import('dart:mirrors');
#import('package:mylib/mylib.dart'); 

main(){
   final urlOfLib = currentMirrorSystem().libraries['myLibraryName'].url;
}
于 2012-10-01T00:36:21.647 に答える
1

通常、ライブラリの静的な位置にあるリソースにアクセスする通常の方法は、相対パスを使用することです。

#import('dart:io');

...

var filePath = new Path('resources/cool.txt');
var file = new File.fromPath(filePath);

// And if you really wanted, you can then get the full path
// Note: below is for example only. It is missing various
// integrity checks like error handling.
file.fullPath.then((path_str) {
  print(path_str);
});

パスファイルに関する追加の API 情報を参照してください

余談ですが、絶対に同じタイプの出力を取得したい場合は__FILE__、次のようなことができます。

#import('dart:io');
...
var opts = new Options();
var path = new Path(opts.script);
var file = new File.fromPath(path);
file.fullPath().then((path_str) {
  print(path_str);
});
于 2012-09-27T18:05:10.993 に答える