我现在在用VB作项目,其中有一步是生成固定格式的文件,共两个文件,一个是.ini文件,一个是xml格式的文件。
.ini文件的格式如下:================================================================
[COMMON]
FolderPath=C:\Documents and Settings\ww[ProcessDirector]
FolderPath=C:\SYNPDInOutInfo[SYNERGY]
FolderPath=C:\SYNMemRead[LAUNCHER]
Init_EXE=xxx.exeProjectCancell_EXE=xxx.exePD_ProjectOutput_EXE=xxx.exeSY_ProjectRegist_EXE=xxx.exe
=================================================================
先说.ini文件,我需要往.ini文件中添加内容,比如没有
[SYNERGY]
FolderPath=C:\SYNMemRead这个节点,我需要新建这个节点,并添加内容,这一步实现过程是使用了一个API,如下:
If SetIniFileString(" SYNERGY ", "FolderPath", TxtSYPath.Text, _
            strIniPath) = False Then
        MsgError "出力失败"
        Exit Sub
    End If
调用的SetIniFileString函数如下:
Public Function SetIniFileString(SecName As String, KeyName As String, _
      DataStr As String, IniName As String) As Boolean
      SetIniFileString = True
      On Error GoTo lError:
      WritePrivateProfileString SecName, KeyName, DataStr, IniName     
      Exit Function      
lError:
    SetIniFileString = False
End Function
利用的API--WritePrivateProfileString如下:
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As Any, ByVal lpFileName As String) As Long
程序能够正常实现添加节点,但是,有个缺点,这些程序虽然能够添加SYNERGY节点,但是添加的位置是文件末尾,我想要的结果是添加到固定位置,即添加到节点[ProcessDirector]和[LAUNCHER]之间,而不是文件末尾。请高手们救救我吧,搞不定了,拜托了。
第二个xml格式文件如下:
<INIT>
<SYNERGY>
    <ServerPort>5</ServerPort>
    <CMDBID>1</CMDBID>
    <CMDBPassword>2</CMDBPassword>
    <CSDBID>3</CSDBID>
    <CSDBPassword>4</CSDBPassword>
</SYNERGY>
<ProcessDirector>
    <ServerName>192.168.1.230</ServerName>
    <DBID>sa</DBID>
    <DBPassword>0000</DBPassword>
</ProcessDirector>
<Common>
    <Password>6</Password>
</Common>
</INIT>
如果不存在INIT节点下的ProcessDirector节点,则新建ProcessDirector节点,新建位置是固定的,即在SYNERGY节点和Common节点中间。实现程序如下:
If IXMLNodeFirst.selectSingleNode("ProcessDirector") Is Nothing Then
        Set IXMLNodeValue = IXML_Document.createElemen("ProcessDirector")
        IXMLNodeValue.appendChild IXML_Document.createTextNode(vbCr)
        IXMLNodeFirst.appendChild IXMLNodeValue
    End If
这个程序也有一个缺陷,就是虽然能正常生成ProcessDirector节点,但它是添加到文件末尾,而不是固定位置,即在SYNERGY节点和Common节点中间。
请高手们帮帮我吧,拜托了,怎么样才能使添加的文件内容在固定位置呢?

解决方案 »

  1.   

    既然用 ini 或 xml,就应该是节点无序的,确认读取程序需要节点有序?
    实在不行就用一个空的 ini 文件,按次序逐个 SetIniFileString,然后将文件覆盖到正式的文件名上,xml 同理。
      

  2.   

    首先谢谢您了,您说的都是对的,这么做确实可以,不过,ini文件和xml文件内容我只需要更新其中一部分,其他的不能动,所以虽然是节点无序,但固定格式是不能变得,这是项目要求。
      

  3.   

    无论是 ini 还是 xml,只有更新的内容在中间,那么文件从更新处开始(甚至很可能从头开始)的内容都需要重写,所以你全部写一遍应该没有性能上的问题。还有文件如果是由本项目创建的,那么可以一开始就将所有的空白节点都准备好,那就不存在次序被打乱的问题了。
      

  4.   

    嘛工程啊,连格式都得固定的,怎么处理的文件啊……我想LZ可以去用文本方式解决问题,这篇里提到了如何去处理一个文本文件,进行增删改。
    http://blog.csdn.net/zcsor/archive/2007/03/07/1522705.aspx实际上我一直都是用OPEN语句去处理这些文件,操作INI的API绝对是dàbiàn,用起来参数很麻烦还得自己写函数,不如OPEN语句来的直接。
    提一点谬论,嘿嘿,偶是业余的。