我正在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/
。
答案 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);
});
上的其他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);
});