2017-03-29 1 views
0

Ich habe eine Prozedur, um eine Datei zu speichern, die eine Ini-Datei ist. Das folgende Verfahren ist nur, wo der Benutzer das Verzeichnis und den Namen der Datei wählt:Warum ist die Erweiterung meiner Ini-Dateien nichts?

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; 

Wie Sie mich die Filter ini einstellen können sehen, aber keine Dateien zeigen überhaupt (es spart noch) Das Verfahren ist unten wo der Benutzer eine zuvor gespeicherte Datei wählen kann

Ich bekomme die Erweiterung des Dateinamens und überprüfen, ob es ini ist. Die ShowMessage ist dort zu sehen, welcher Wert für Testzwecke zurückgegeben wird. Wenn ich auf eine Ini-Datei klicke, wird nichts zurückgegeben, aber wenn ich auf eine Textdatei klicke, wird '.txt' zurückgegeben. Warum speichern meine Ini-Dateien mit dem Typ als 'Datei', wenn sie Ini-Dateien sind.

Wie könnte ich meine Ladedatei-Prozedur ändern, um festzustellen, ob es eine INI-Datei ist und wenn nicht, dann beenden?

+1

lösen werde ich vermuten, dass Sie nicht Ihre Dateien wie INI-Dateien speichern. Haben Sie die Eigenschaft DefaultExt auf 'ini' gesetzt? Haben Sie mit Explorer überprüft, dass Ihre Dateien wirklich die richtige Erweiterung haben? – Dsm

+0

Warum debuggen Sie nicht Ihren Code? Sie stellen hier Fragen, die beantwortet werden könnten, wenn Sie Ihren Code debuggen würden. Bis Sie sich bemühen, zu lernen, wie man debuggt, sind Sie dazu verdammt, für immer blockiert zu sein, solche Fragen zu stellen. –

+0

Es gibt viele weitere Fehler. Debugging wird sie enthüllen. Sie haben keine Zeit zu lernen, wie man debuggt. Das ist Unsinn. Du hast keine Zeit, es nicht zu tun. –

Antwort

2

die Eigenschaft DefaultExt im Savedialog Set zu ‚ini‘ Diese Ihr Problem

+0

Ja, das ist der bessere Weg, um es zu tun, und ist mir entfallen. +1 – MartynA

1

Ich glaube, Sie gehen davon aus, dass die Tatsache, dass Sie die Savedialog des angeben Filter wie Sie zwingt die Savedialog des FileName eine Erweiterung von ‚Ini‘ zu haben. Es tut nicht. Die Eigenschaft Filter des Dialogfelds bestimmt, welche Dateien darin aufgelistet sind, nicht die Erweiterung, die die gespeicherte Datei hat.

Versuchen Sie, den folgenden Code:

if SaveDialog.Execute then 
begin 
    SaveSeatingPlan(SaveDialog.FileName); 
    Assert(SameText(ExtractFileExt(SaveDialog.FileName), '.Ini')); 
    ShowMessage('File saved: ' + SaveDialog.FileName); 
end else 
    ShowMessage('Save file was cancelled'); 

Anstelle der Assert, können Sie natürlich hängen Sie die ‚INI‘ Erweiterung in Ihrem Code oder, besser, das tun, was die andere Antwort vermuten läßt.

+0

Ich habe es mit der anderen Lösung, die Sie empfohlen haben, behoben, aber ich nahm an, dass es als INI-Datei wegen anderem Code, wo ich Code wie ini.writeinteger oder ini.writestring etc, nicht den Filter verwenden würde. –

Verwandte Themen