在Dart中读取库下的静态文件?

时间:2012-09-27 17:33:27

标签: dart dart-io dart-mirrors

我正在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.dart + resources/

3 个答案:

答案 0 :(得分: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/');
}

它应该输出如下内容:

  

/用户/凯/测试/ LIB /资源/

在将来的版本中,可能会有更好的方法。在这种情况下,我会更新答案。

更新:您还可以在库中定义私有方法:

/**
 * Returns the path to the root of this library.
 */
_getRootPath() {
  var pathString = new Path(currentMirrorSystem().libraries['LIBNAME'].url).directoryPath.toString().replaceFirst('file:///', '');
  return pathString;
}

答案 1 :(得分:2)

飞镖镜API(仍然是实验性的,并且尚未在所有平台上提供,例如dart2js)在 LibraryMirror 上公开了 url getter。这应该给你你想要的。

我不知道有任何其他方法可以在库中获取此信息。

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

main(){
   final urlOfLib = currentMirrorSystem().libraries['myLibraryName'].url;
}

答案 2 :(得分: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);
});

请参阅PathFile

上的其他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);
});