读取和写入 .ini 文件的推荐方法

Posted

技术标签:

【中文标题】读取和写入 .ini 文件的推荐方法【英文标题】:Recommended way to read and write .ini files 【发布时间】: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 中尝试此操作。

【问题讨论】:

【参考方案1】:

这并不令人愉快,但您可以使用 Windows API。 Here's a link 和 another 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

【讨论】:

以上是关于读取和写入 .ini 文件的推荐方法的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 读取和写入 ini 文件

Python读取配置文件(config.ini),写入配置文件

Python读取配置文件(config.ini),写入配置文件

Win.ini和注册表的读取写入

创建ini文件,在PHP中写入值

在Delphi下,怎样在DLL里读取ini文件的内容