2017-03-10 1 views
0

Ich habe diesen Code, der den Speicherort der Objekte in einer Ini-Datei speichert, aber wenn ich versuche, eine bereits gespeicherte Datei zu überschreiben, löscht es nicht die Daten in der Datei.Wie überschreiben INI-Datei

Ich habe ein Popup, das den Benutzer fragt, ob sie überschreiben wollen, aber es löscht nicht die ganze Datei, wie kann ich es ändern, damit es tut?

procedure TForm1.SaveFile(Sender: TObject); 
var 
    Dialog : TSaveDialog; 
begin 
    Dialog := TSaveDialog.Create(self); 
    try 
    //dialog properties go here 
    Dialog.Filter := 'Title (*.ini)|*.ini'; 
    Dialog.Options := Dialog.Options + [ofOverwritePrompt]; 
    if Dialog.Execute then 
    begin 
     //any saving procedures go here if required 

     ShowMessage('File saved: ' + Dialog.FileName); 
    end 
    else 
     ShowMessage('Save file was cancelled'); 
    finally 
    Dialog.Free; 
    end; 
end; 

Das folgende Verfahren speichert die Objekte in der Datei selbst:

procedure TForm1.Save(const FileName: string); 
var 
    Ini: TMemIniFile; 
    I: Integer; 

procedure WhatYouAreSaving(Object: TButton); 
    var 
    Section: string; 
    begin 
    Section := 'Object' 
    //Properties you want to save go here 
    end; 

begin 
    Ini := TMemIniFile.Create(FileName); 
    ////For reference, the answer provided would go here 
    try 
    WhatYouAreSaving(Object); 
    Ini.UpdateFile; 
    finally 
    Ini.Free; 
    end; 
end; 
+0

Sie zeigen den relevanten Code nicht an. –

+0

@FreeConsulting benötigen Sie das Saveseatingplan-Verfahren? –

+0

@FreeConsulting Ich habe die saveseatingplan Prozedur hinzugefügt –

Antwort

3

Um den Inhalt der ini-Datei zu löschen, rufen Sie Ini.Clear nach Ini := TMemIniFile.Create(FileName);

alle Daten aus der Löscht INI-Datei im Speicher.

Rufen Sie Löschen Sie löschen Sie alle Daten aus der INI-Datei, die derzeit im Arbeitsspeicher gepuffert ist. Alle Abschnitte, Schlüssel und Werte werden gelöscht.


Um einen Abschnitt in der ini-Datei, verwenden TMemIniFile.EraseSection zu löschen.

+0

Und wenn Sie nicht den Inhalt der gesamten INI-Datei löschen möchten, sondern vielleicht nur einen Teil davon, sollten Sie stattdessen stattdessen den Löschbereich verwenden: http://docwiki.embarcadero.com/Libraries/Berlin/en/System.IniFiles. TMemIniFile.EraseSection – SilverWarior

+0

@SilverWarior, danke, aktualisierte Antwort. –