创建Web配置INI文件

ZDNet软件频道 时间:2005-02-17 作者:Builder.com |  我要评论()
本文关键词:PhillipPerkins
特定的应用程序配置的历史信息往往被存放在INI文件中,这种文件包括了几个部分,每个部分包括了键名和键值纯文本数据。有很多的应用程序仍然在使用INI文件。

特定的应用程序配置的历史信息往往被存放在INI文件中,这种文件包括了几个部分,每个部分包括了键名和键值纯文本数据。在Windows系统中,注册表文件已经代替了INI文件来存储配置信息。然而,还是有很多的应用程序仍然在使用INI文件。

在Web应用程序中,配置信息往往非常复杂,这也使得配置信息在文件中的存放杂乱无章且难于维护。如果用户自己来为Web应用程序配置信息设置INI文件,则可以为这些信息提供集中式的管理,并能够对Web配置进行从前台到后台的全面更改。

INI文件常常按照如下格式包含相关配置信息:

[Section]

key=value

同样的,Windows的API提供了一些函数可以获取并存储INI 信息。其中两个函数是getPrivateProfileString()和writePrivateProfileString()。这两个函数封装了从INI文件中导出数据或将数据导出到INI文件的多个步骤。你可以在自己的INI文件中模拟相同的功能。无需使用上面所提到的INI格式,你就可以配置基于XML的INI文件。

在接下来的例子中,我将在ASP中创建一个类,该类将收集和编写配置信息的功能封装起来。此类包含了两种方法:getPrivateProfileString()和writePrivateProfileString()。通过以上两种方法,我将模拟两个Windows API函数的接口。代码如下:

Class CINI

Private m_dom

Public Function getApplicationPath()

    Dim sURL

    sURL = Request.ServerVariables("URL")

    getApplicationPath = Mid(sURL, 1, InStr(2, sURL, "/"))

End Function

Public Function getPrivateProfileString(sDomain, sKeyName, sDefault,

 sFileName)

    Dim m_result

    m_result = ""

    If m_dom.load(sFileName) Then

        Dim domain_node

        Set domain_node = m_dom.selectSingleNode("//domain[@domain_name='"

& LCase(sDomain) & "']")

        If domain_node Is Nothing Then

            m_result = sDefault

            Err.Raise vbObjectError, "", "no domain"

        Else

            Dim node

            Set node = domain_node.selectSingleNode(sKeyName)

            If node Is Nothing Then

                m_result = sDefault

                Err.Raise vbObjectError, "", "no node"

            Else

                m_result = Unescape(node.text)

            End If

            Set node = Nothing

        End If

        Set domain_node = Nothing

    Else

        m_result = sDefault

        Err.Raise vbObjectError, "", "File Error: Cannot open or find " &

sFileName

 & "."

    End If

    getPrivateProfileString = m_result

End Function

 

Public Function writePrivateProfileString(sDomain, sKeyName, sString,

sFileName)

    If m_dom.load(sFileName) Then

        Dim domain_node, node

        Set domain_node =

 m_dom.selectSingleNode("//domain[@domain_name='" & LCase(sDomain) &

 "']")

        If domain_node Is Nothing Then

            Dim domain_attr, map

            Set domain_node = m_dom.createNode(1, "domain", "")

            Set domain_attr = m_dom.createNode(2, "domain_name", "")            

            domain_attr.text = LCase(sDomain)

            Set map = domain_node.Attributes

            map.setNamedItem domain_attr

            Set domain_node =

m_dom.documentElement.appendChild(domain_node)

            Set map = Nothing

            Set domain_attr = Nothing

        End If

        Set node = domain_node.selectSingleNode(sKeyName)

        If node Is Nothing Then

            Set node = m_dom.createNode(1, sKeyName, "")

            Set node = domain_node.appendChild(node)

        End If

        node.text = Escape(sString)

        If m_dom.save(sFileName) <> 0 Then _

            Err.Raise vbObjectError, "CToolbox::writePrivateProfileString(.., "

&

 sFileName & ")", "Cannot save file for some reason."

        Set domain_node = Nothing

        Set node = Nothing

    Else

        Err.Raise vbObjectError, "", "File Error: Cannot open or find " &

sFileName

 & "."

    End If

End Function

 

Private Sub Class_Initialize

    Set m_dom = Server.CreateObject("MSXML2.DOMDocument")

    m_dom.async = False

End Sub

 

Private Sub Class_Terminate

    Set m_dom = Nothing

End Sub

 

End Class

 


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134