Haxe宏-打开文件与相对路径



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

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

e。旅客:a (b)宏。Hx, c(…))

我需要打开"c"直接当我运行宏方法从"宏。hx"

如果你有一个想法,谢谢你:)

可以在宏中使用这样的函数:

    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,所以尝试使用唯一的包/名称,这样就不会发生意外。

但它应该为你工作很好,我使用它在我的编译时库,如果你想看看一个例子实现。我已经链接到函数与相关代码。

相关内容

  • 没有找到相关文章

最新更新