Wie ändert man am elegantesten eine Zeile in einem Text-File, z.B.: Wie ändert man einen Wert in einer INI-Datei?
Es kann doch nicht sein, dass man die ganze Datei in ein Array einliest, und beim erneuten schreiben auf den zu schreibenden Zeilenanfang (z.B. "Printer = ") wartet und diese Zeile dann manipuliert - das ist Laufzeittechnisch ja eine kleien Katastrophe, wenn die Datei etwas länger ist…
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
Private Sub Form\_Load()
'KPD-Team 1999
'URL: http://www.allapi.net/
'E-Mail: [email protected]
Dim Ret As String, NC As Long
'Write the setting to the file (c:\test.ini) under
' Project1 -\> Keyname
WritePrivateProfileString App.Title, "KeyName", "This is the value", "c:\test.ini"
'Create a buffer
Ret = String(255, 0)
'Retrieve the string
NC = GetPrivateProfileString(App.Title, "KeyName", "Default", Ret, 255, "C:\test.ini")
'NC is the number of characters copied to the buffer
If NC 0 Then Ret = Left$(Ret, NC)
'Show our string
MsgBox Ret
'Delete the file
Kill "c:\test.ini"
End Sub
…die aber auch nichts anderes machen. Um eine Textdatei zu ändern muß man IMMER die. alte Datei bis zur Änderung einlesen und neu schreiben, die zu ändernde Stelle schreiben und dann den Rest schreiben. Darum kommt man nicht herum.
Einzige Ausnahme: Man will nur Zeichen ändern ohne die Länge der Zeilen zu verändern. Dann kann man im Binary oder Random-Acces-Modus zugreifen.