2

我正在 Dart 中编写一个库,并且在库文件夹下有静态文件。我希望能够读取这些文件,但我不确定如何检索它的路径......在其他一些语言中没有__FILE__$0类似。

更新:看来我还不够清楚。让这帮助你理解我:

测试.dart

import 'foo.dart';

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

飞镖

library asd;

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

它给了我错误的文件夹位置。它给了我通往test.dart+的路径resources/,但我想要通往foo.dart+的路径resources/

4

3 回答 3

4

如前所述,您可以使用镜子。这是一个使用您想要实现的示例的示例:

测试.dart

import 'foo.dart';

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

飞镖

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 mirrors API(仍然是实验性的,并且还没有在所有平台上可用,例如 dart2js)在LibraryMirror上公开了一个url getter 。这应该给你你想要的。

我不知道有任何其他方式可以在图书馆中获取此信息。

#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 回答