我有一个保存文件的程序,这是一个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文件,如果没有则退出?
答案 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'代码中的扩展名,或者更好的是,做其他答案所暗示的内容。