@Falko
Naja, Textformat wird nicht berücksichtigt (funktioniert nur mit ASCII-Texten, die es kaum noch gibt,
heutzutage sind die meisten Textdateien in UTF-8 codiert), und auch langsamer, was bei kleineren
Dateien natürlich keine Rolle spielt. Vorteile kann ich keine erkennen, ganz im Gegenteil
// edit
Hab meinen Code nochmals optimiert. Hab es in eine Procedure gepackt und jetzt wird auch
berücksichtigt, wenn die letzte Zeile kein EOL (EndOfLine) enthält.
Code: Alles auswählen
EnableExplicit
Procedure RemoveFirstLine(File, EOL.s = #LF$)
Protected Format, length.q, *mem, pos.q
If IsFile(File)
FileSeek(File, 0)
Format = ReadStringFormat(File)
length = Lof(File)
If length
*mem = AllocateMemory(length)
ReadData(File, *mem, length) ; Daten in den Speicher lesen.
pos = FindString(PeekS(*mem, -1, Format), EOL) ; erstes Zeilenende Zeichen suchen.
If pos
WriteStringFormat(File, Format) ; BOM schreiben.
WriteData(File, *mem + pos, length - pos) ; Daten ab gefundener pos schreiben.
TruncateFile(File) ; Rest vom Orginal abschneiden.
If PeekS(*mem + length - Len(EOL), Len(EOL), Format) <> EOL
WriteStringN(File, "", Format)
EndIf
EndIf
FreeMemory(*mem)
EndIf
EndIf
ProcedureReturn Format
EndProcedure
Define Format, FF = OpenFile(#PB_Any, "wichtig.txt")
If FF
Format = RemoveFirstLine(FF)
WriteStringN(FF, "Ich bin die neue letzte Zeile", Format)
; ...
CloseFile(FF)
EndIf
// edit
noch mal fehler beseitigt bei leerer Datei.