为什么我的 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'
这些将解决您的问题
我有一个保存文件的程序,它是一个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' 这些将解决您的问题