为什么我的 ini 文件的扩展名什么都没有?

Why is the extension of my ini files nothing?

我有一个保存文件的程序,它是一个ini文件。下面的过程只是用户选择文件的目录和名称:

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;

如您所见,我将过滤器设置为 ini 但根本没有文件显示(它仍然保存) 下面的过程是用户可以 select 以前保存的文件

procedure TForm1.LoadFileBtnClick(Sender: TObject);
Var
FileName, FileExtension : String;
SelectedFile : TOpenDialog;
begin
SelectedFile := TOpenDialog.Create(nil);
Try
  if SelectedFile.Execute() then     
   FileName := SelectedFile.FileName        
   else
   //Do whatever here if user doesn't select file
Finally
  SelectedFile.Free;  //Free dialog from memory

End;
  FileExtension := ExtractFileExt(FileName);

  if not (FileExtension = 'ini') then
    exit
    else
//Do whatever here if file extension matches specified type
end;

我得到文件的扩展名并检查它的 ini. ShowMessage 用于查看为测试目的返回的值。当我单击 ini 文件时,没有返回任何内容,但当我单击文本文件时,返回“.txt”。为什么我的 ini 文件保存为 'File' 类型,而它们是 ini 文件。

我如何更改我的加载文件程序来检测它是否是一个 ini 文件,如果不是则退出?

我认为您是在假设您指定 SaveDialog 的 Filter 会强制 SaveDialog 的 FileName 具有 'Ini' 的扩展名。它不是。对话框的 Filter 属性 决定其中列出的文件,而不是保存文件的扩展名。

试试下面的代码:

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');

您当然可以在代码中附加“.Ini”扩展名而不是 Assert,或者更好的做法是按照其他答案的建议进行操作。

将 SaveDialog 中的 属性 DefaultExt 设置为 '.ini' 这些将解决您的问题