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

时间:2017-03-29 13:48:31

标签: file delphi load ini

我有一个保存文件的程序,这是一个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,但根本没有显示任何文件(它仍然保存) 下面的过程是用户可以选择以前保存的文件

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文件在它们是ini文件时会以“文件”类型保存。

如何更改我的加载文件过程以检测其是否为ini文件,如果没有则退出?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我认为你假设你正在指定SaveDialog Filter,因为你强制SaveDialog的FileName延长了'燕丽&#39 ;.它不是。对话框的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');

而不是Assert,您当然可以附加' .Ini'代码中的扩展名,或者更好的是,做其他答案所暗示的内容。