gpt4 book ai didi

file - 我如何存储可以在Delphi中运行时更改的文件路径

转载 作者:行者123 更新时间:2023-12-02 17:49:02 26 4
gpt4 key购买 nike

我的程序允许用户更改主要文件集的位置。目前,我有一个具有固定位置的文本文件,其中包含其他文件的文件夹位置。然而,这似乎几乎违背了目的。有没有更好的方法来存储这个文件路径?

最佳答案

Delphi 包含 TRegistry类,这使得从 Windows 注册表中保存和检索设置信息变得非常简单。

uses
Registry;

const
RegKey = 'Software\Your Company\Your App\';

procedure TForm1.SaveSettingsClick(Sender: TObject);
var
Reg: TRegistry;
DataDir: string;
begin
// Use the result of SelectDirectory() or whatever means you use
// to get the desired location from the user here. ExtractFilePath()
// is only used as an example - it just gets the location of the
// application itself and then appends a subdirectory name to it.
DataDir:= ExtractFilePath(Application.ExeName) + 'Data\';
Reg := TRegistry.Create;
try
if Reg.OpenKey(RegKey, True) then
Reg.WriteString('DataDir', DataDir);
finally
Reg.Free;
end;
end;

procedure TForm1.GetSettingsClick(Sender: TObject);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
if Reg.OpenKey(RegKey, False) then
Label1.Caption := Reg.ReadString('DataDir');
finally
Reg.Free;
end;
end;

正如 @SirRufo 在评论中提到的,Delphi 也有 TRegistryIniFile ,它充当注册表函数的包装器,允许您在不了解注册表结构的情况下使用它。 (它的用法与 TIniFile/TMemIniFile 类似,我接下来将对此进行描述。)

如果您不想使用注册表,您也可以非常轻松地使用 INI(文本文件)。 Delphi 支持 TIniFile 中的标准(基于 WinAPI)INI 文件。 ,以及它自己的(IMO 更好地实现)TMemIniFile 。两者相当兼容,因此我将在此处仅使用 TMemIniFile 进行演示。

(用于读/写的位置是为了简单起见。实际上,您应该使用 %APPDATA% 目录的相应子文件夹,该子文件夹是通过使用 SHGetKnownFolderPath 的适当调用获得的>FOLDERID_RoamingAppDataFOLDERID_LocalAppData 常量。)

uses
IniFiles;

// Writing
var
Ini: TMemIniFile;
RootDir: string;
begin
RootDir := ExtractFilePath(Application.ExeName);
Ini := TMemIniFile.Create(TheFile);
try
Ini.WriteString('Settings', 'DataDir', RootDir + 'Data\');
Ini.UpdateFile;
finally
Ini.Free;
end;
end;

// Reading
var
Ini: TMemIniFile;
RootDir: string;
begin
RootDir := ExtractFilePath(Application.ExeName);
Ini := TMemIniFile.Create(TheFile); // The file is your ini file name with path
try
DataDir := Ini.ReadString('Settings', 'DataDir', RootDir);
if DataDir = '' then
DataDir := RootDir; // No user specified location. Use app's dir
finally
Ini.Free;
end;
end;

关于file - 我如何存储可以在Delphi中运行时更改的文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22424369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com