【问题标题】:Recommended way to read and write .ini files读取和写入 .ini 文件的推荐方法
【发布时间】:2010-10-14 04:38:32
【问题描述】:

VBA 中是否有任何方法可用于读取和写入 INI 文件?我知道我可以使用;

Open "C:\test.ini" For Input As #1

...并解析数据。相反,我想看看哪些工具已经可用。

我知道在 C# 中你可以做到...

 using INI;
 INIFile ini = new INIFile("C:\test.ini");

是否有 VBA 的等价物?

我正在 MS Access 2003 VBA 中尝试此操作。

【问题讨论】:

    标签: vba ms-access ini


    【解决方案1】:

    这并不令人愉快,但您可以使用 Windows API。 Here's a linkanother from MS

    【讨论】:

      【解决方案2】:

      FileSystemObject object 带有 [TextStream](http://msdn.microsoft.com/en-us/library/314cz14s(VS.85).aspx) 是在 VBA 中读写文本文件的通常推荐方法。

      【讨论】:

      • 真的吗?为什么要使用外部库(当然,我假设是后期绑定)来处理 VBA 本身提供的东西?有什么优势?
      • 在我看来,它使代码更容易阅读。您可以使用 For ... Each 轻松遍历文件夹。
      • 最好不要直接读写它们。 API 方法要好得多,因为它抽象了理解 INI 文件格式的需要。当 INI 文件已经存在时,编写代码来理解它是没有意义的。
      【解决方案3】:

      Karl Peterson's kpini 拥有您可能需要的一切:API 声明、Cinifile 类,诸如此类。我会从它开始,然后根据口味对其进行变形,这应该不会花很长时间。

      【讨论】:

        【解决方案4】:

        这是我们使用的一些代码 sn-ps,它应该可以帮助您理解这个想法。这些例程使用 API 调用。包含两个函数来读取/写入 ini 文件中特定部分的字符串设置。

        Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
        Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
        
        Public Function IniFileName() As String
          IniFileName = "c:\[yourpath here]\settings.ini"
        End Function
        
        
        Private Function ReadIniFileString(ByVal Sect As String, ByVal Keyname As String) As String
        Dim Worked As Long
        Dim RetStr As String * 128
        Dim StrSize As Long
        
          iNoOfCharInIni = 0
          sIniString = ""
          If Sect = "" Or Keyname = "" Then
            MsgBox "Section Or Key To Read Not Specified !!!", vbExclamation, "INI"
          Else
            sProfileString = ""
            RetStr = Space(128)
            StrSize = Len(RetStr)
            Worked = GetPrivateProfileString(Sect, Keyname, "", RetStr, StrSize, IniFileName)
            If Worked Then
              iNoOfCharInIni = Worked
              sIniString = Left$(RetStr, Worked)
            End If
          End If
          ReadIniFileString = sIniString
        End Function
        
        Private Function WriteIniFileString(ByVal Sect As String, ByVal Keyname As String, ByVal Wstr As String) As String
        Dim Worked As Long
        
          iNoOfCharInIni = 0
          sIniString = ""
          If Sect = "" Or Keyname = "" Then
            MsgBox "Section Or Key To Write Not Specified !!!", vbExclamation, "INI"
          Else
            Worked = WritePrivateProfileString(Sect, Keyname, Wstr, IniFileName)
            If Worked Then
              iNoOfCharInIni = Worked
              sIniString = Wstr
            End If
            WriteIniFileString = sIniString
          End If
        End Function
        

        【讨论】:

          猜你喜欢
          • 2015-09-17
          • 2013-06-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-01
          • 2014-09-17
          • 2011-08-07
          • 2013-05-21
          相关资源
          最近更新 更多