File Haxe宏-使用相对路径打开文件

File Haxe宏-使用相对路径打开文件,file,macros,haxe,File,Macros,Haxe,我正在编写一个宏,它需要打开一个目录,该目录与我的宏类位于同一文件夹中。问题是我需要能够做同样的事情,而不需要知道宏的文件夹 我的问题很简单,有没有办法在当前目录下用宏打开文件系统 e、 g: a(b(Macro.hx,c(…)) 当我从“macro.hx”运行宏方法时,我需要直接打开“c” 如果您有想法,谢谢:)您可以在宏中使用如下函数: static function loadFileAsString(path:String) { try {

我正在编写一个宏,它需要打开一个目录,该目录与我的宏类位于同一文件夹中。问题是我需要能够做同样的事情,而不需要知道宏的文件夹

我的问题很简单,有没有办法在当前目录下用宏打开文件系统

e、 g: a(b(Macro.hx,c(…))

当我从“macro.hx”运行宏方法时,我需要直接打开“c”


如果您有想法,谢谢:)

您可以在宏中使用如下函数:

    static function loadFileAsString(path:String) {
        try {
            var p = haxe.macro.Context.resolvePath(path);
            return sys.io.File.getContent(p);
        }
        catch(e:Dynamic) {
            return haxe.macro.Context.error('Failed to load file $path: $e', Context.currentPos());
        }
    }
基本上,
Context.resolvePath
将解析相对于所有类路径的路径。因此,如果宏位于文件
my/package/MyMacro.hx
中,并且要加载
my/package/MyMacroData.json
,则可以使用:

haxe.macro.Context.resolvePath( 'my/package/MyMacroData.json' );
这将检查构建中的每个类路径,包括任何haxelib等,因此它将找到您的文件,但也有可能通过将文件放在相同的包/位置,但放在不同的类路径或haxelib中来“隐藏”它,所以请尝试使用唯一的包/名称,以防意外发生这种情况


但是它对您来说应该很好,如果您想看一个示例实现,我会在我的示例中使用它。我已经用相关代码链接到函数。

谢谢,这正是我需要的。我已经尝试了resolvePath,但没有成功,因为我尝试的是my.package.MyMacroData.json,而不是“/”。。。。我很笨^^“谢谢你:)