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

标签 file macros haxe

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

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

例如: 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' );

这将检查您构建中的每个类路径 - 包括任何 haxelibs 等,因此它会找到您的文件,但可以通过在相同的包/位置但在不同类中的文件来“隐藏”它路径或 haxelib,因此请尝试使用唯一的包/名称,以免意外发生。

但它应该适合你,我在我的 compiletime library 中使用它如果你想看一个示例实现。我已使用相关代码链接到该函数。

关于file - Haxe 宏 - 使用相对路径打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22746216/

相关文章:

java - 使用文件的凯撒密码

java - 在j2me中读取文件内容

c++ - #ifdef 无法按预期使用预编译 header

Haxe 矢量文档?

php - 按添加日期对文件进行排序 Laravel PHP

c - 如何在宏中使用#ifdef ?'#' 后面没有跟宏参数

C++ 宏 : order of precedence difference?

actionscript-3 - Haxe (Flash) 和内联

fonts - FlashDevelop + Haxe-使用嵌入式字体

php - 警告 : mysqli_connect(): (28000/1045): on Cpanel