在内存中存储 INI 文件

发布于 2024-10-30 23:53:41 字数 744 浏览 5 评论 0原文

我正在编写一个应用程序,它使用 ini 文件来存储所有状态代码(错误、成功代码等)。一个非常简单的版本是这样的:

[success]
000=Status code not found.

[error]
000=Error code not found.
001=Username/Password not found.

我的 CF 组件使用以下代码:

component  hint="Set of tools to interact with status codes."{
    public function init(string codefile) any{
        this.codefile = Arguments.codefile;
    }

    public function getCodeString(string type, string code) string{
        var code = getProfileString(Variables.codefile, Arguments.type, Arguments.code);
        return code;
    }
}

我假设当我调用 getProfileString 是 Railo 打开文件、搜索键并返回值。因此,随着我的应用程序的增长并且我有更多的代码,我预计这个过程会减慢。那么有没有一种方法可以在 init 方法中打开文件并将其全部读入变量范围,然后从那里调用 getProfileString ?

I am writing an application that uses an ini file to store all status codes (errors, success codes, etc.) A very simple version is this:

[success]
000=Status code not found.

[error]
000=Error code not found.
001=Username/Password not found.

And my CF Component to work with that uses the following code:

component  hint="Set of tools to interact with status codes."{
    public function init(string codefile) any{
        this.codefile = Arguments.codefile;
    }

    public function getCodeString(string type, string code) string{
        var code = getProfileString(Variables.codefile, Arguments.type, Arguments.code);
        return code;
    }
}

What I assume happens when I call the getProfileString is that Railo opens the file, searches for the key and returns the value. So as my application grows and I have a lot more codes, I expect that this process will slow down. So is there a way that I can open the file in my init method and read it all into the variables scope, and call the getProfileString from there?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

£烟消云散 2024-11-06 23:53:41

如果您想坚持使用 .ini 方法,您甚至可以在 onApplicationStart 中解析您的 ini 文件并将数据推送到应用程序范围,就像 @Sergii 推荐的 XML 文件一样。

做类似的事情:

var sections = getProfileSections(variables.codeFile);
var sectionEntries = [];
var indx = 0;
for (key in sections){
    sectionEntries = listToArray(sections[key]);
    application[key] = {};
    for (indx=1; indx <= arraylen(sectionEntries); indx++){
            application[key][sectionEntries[indx]] = getProfileString(variables.cfgFile,key,sectionEntries[indx]);
    }
}

还没有在 Railo 上测试过这个,但它至少应该在 ColdFusion 9 上工作

You can even parse your ini file in onApplicationStart and push the data into application scope like recommended for a XML file by @Sergii, if you want to stick with the .ini approach.

Do something like that:

var sections = getProfileSections(variables.codeFile);
var sectionEntries = [];
var indx = 0;
for (key in sections){
    sectionEntries = listToArray(sections[key]);
    application[key] = {};
    for (indx=1; indx <= arraylen(sectionEntries); indx++){
            application[key][sectionEntries[indx]] = getProfileString(variables.cfgFile,key,sectionEntries[indx]);
    }
}

haven't tested this on Railo, but it should work on ColdFusion 9 at least

断爱 2024-11-06 23:53:41

因为您使用的是 Railo,所以可能有最简单的解决方案:将文件放入 RAM 文件系统。

因此文件的完整路径将类似于 ram:///some/path/to/config.ini 。

显然,您需要首先将文件写入 RAM,可能是在第一次请求时。

因此,组件的稍微修改版本可能如下所示:

component  hint="Set of tools to interact with status codes."{

    public function init(string codefile, string.ramfile) any{
        variables.codefile = arguments.codefile;
        variables.ramfile = arguments.ramfile;
    }

    public function getCodeString(string type, string code) string{

        if (NOT fileExists(variables.ramfile)) {
            fileCopy(variables.codefile, variables.ramfile);
        }

        return getProfileString(variables.ramfile, arguments.type, arguments.code);

    }
}

请注意,我已将 initthis.codefile 更改为 variables.codefile >。

无论如何,我也不确定 ini 文件是最方便且可维护的解决方案。无论如何,你每次都需要解析它,对吧?如果您需要文件配置,请使用XML。只需在 onApplicationStart 中解析它并将数据推送到应用程序范围即可。

Because you are using Railo there's possibly easiest solution: put the file into the RAM filesystem.

So full path to the file will look like ram:///some/path/to/config.ini.

Obviously, you need to write the file into the RAM first, possibly on first request.

So slightly modified version of the component may look this way:

component  hint="Set of tools to interact with status codes."{

    public function init(string codefile, string.ramfile) any{
        variables.codefile = arguments.codefile;
        variables.ramfile = arguments.ramfile;
    }

    public function getCodeString(string type, string code) string{

        if (NOT fileExists(variables.ramfile)) {
            fileCopy(variables.codefile, variables.ramfile);
        }

        return getProfileString(variables.ramfile, arguments.type, arguments.code);

    }
}

Please note that I've changed this.codefile to the variables.codefile in the init.

Any way, I'm also not sure ini file is the most handy and maintainable solution. You need to parse it each time any way, right? If you need a file config, use XML. Just parse it in onApplicationStart and push the data into the application scope.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文