Private Declare Function GetPrivateProfileSection Lib "kernel32.dll" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSectionNames Lib "kernel32.dll" Alias "GetPrivateProfileSectionNamesA" (ByVal lpszReturnBuffer As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32.dll" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Public Sub MergeIniFiles(ByRef vsFirstFile As String, ByRef vsSecondFile As String, Optional ByVal vsDestFile As String)
Dim sBuffer As String
Dim nLength As Long
Dim iSection As Long
Dim iLine As Long
Dim xsSections() As String
Dim xsLines() As String
Dim nPos As Long
Dim nBuffserSize As Long
If LenB(vsDestFile) Then
FileCopy vsSecondFile, vsDestFile
Else
vsDestFile = vsSecondFile
End If
nBuffserSize = 0
Do
nBuffserSize = nBuffserSize + &H4000&
sBuffer = Space$(nBuffserSize)
nLength = GetPrivateProfileSectionNames(sBuffer, nBuffserSize, vsFirstFile)
Loop While nLength = nBuffserSize - 2
xsSections = Split(Left$(sBuffer, nLength), vbNullChar)
For iSection = 0 To UBound(xsSections)
If LenB(xsSections(iSection)) Then
nBuffserSize = 0
Do
nBuffserSize = nBuffserSize + &H4000&
sBuffer = Space$(nBuffserSize)
nLength = GetPrivateProfileSection(xsSections(iSection), sBuffer, nBuffserSize, vsFirstFile)
Loop While nLength = nBuffserSize - 2
xsLines = Split(Left$(sBuffer, nLength), vbNullChar)
For iLine = 0 To UBound(xsLines)
nPos = InStr(xsLines(iLine), "=")
If nPos Then
WritePrivateProfileString xsSections(iSection), Left$(xsLines(iLine), nPos - 1), Mid$(xsLines(iLine), nPos + 1), vsDestFile
End If
Next iLine
End If
Next iSection
End Sub