首页 > 解决方案 > 如何共享应用程序和关联的数据文件

问题描述

我使用 delphi 社区版编写了一个程序(firemonkey)。我想分享这个程序,但是我的朋友要下载的 .exe 文件必须不时访问一个文本文件来检索字符串。在编写程序时,我使用了一个事件处理程序,在启动时加载文本文件:

tform3.formCreate(发件人:Tobject);...assignfile(myfile,('C:* * * *******.txt)); ...

在设计阶段工作得很好。

作为一个业余爱好者,我现在发现自己陷入了困境。如果我使用 INNO 安装编译器来创建我计划执行的安装程序,我不能对数据文件的位置有同样的硬连线引用 ('C:**** * )。我需要更改上述代码,以便 .exe 文件可以找到支持的数据文件,而不管 .exe 文件(和数据文件)在其他人的 PC 上的位置。

我怎样才能做到这一点?即我需要什么代码(代替上面的代码)来确保我分发的安装程序将安装一个.exe 文件,该文件可以找到它引用的数据文件?

任何帮助,非常感谢。还在学习。

标签: delphisharing

解决方案


只读访问

如果数据文件应始终以只读模式打开,最简单的解决方案是将其放在 *.exe 文件旁边。然后,在运行时动态查找 *.exe 文件的路径并对其进行修改以查找数据文件的路径。例如,

uses
  IOUtils;

procedure TForm1.FormCreate(Sender: TObject);
var
  FileName: string;
begin
  FileName := TPath.Combine(ExtractFilePath(ParamStr(0)), 'data.txt');
  ShowMessage(TFile.ReadAllText(FileName, TEncoding.UTF8));
end;

ParamStr(0)包含 *.exe 文件的路径,例如

'C:\Users\Andreas Rejbrand\Documents\Embarcadero\Studio\Projects\test\Win32\Debug\Project1.exe'

然后ExtractFilePath(ParamStr(0))

'C:\Users\Andreas Rejbrand\Documents\Embarcadero\Studio\Projects\test\Win32\Debug\'

最后,TPath.Combine(ExtractFilePath(ParamStr(0)), 'data.txt')

'C:\Users\Andreas Rejbrand\Documents\Embarcadero\Studio\Projects\test\Win32\Debug\data.txt'

确保安装程序将数据文件放在 *.exe 文件旁边。

读写访问

如果我们谈论的是每个用户需要更改的设置文件或其他文件(通过软件),则不能将其放在 *.exe 文件旁边,因为 *.exe 文件通常位于 Program Files 文件夹中,这是只读的。此外,只有一个 Program Files 文件夹,但 PC 上可能有很多用户,每个用户都应该有自己的副本。

解决方案是将文件保存在用户自己的文件夹中,具体来说就是AppData文件夹:

FileName := TPath.GetHomePath + '\Mariner\My Word Processor App\Settings\settings.ini';

(使用不同的路径构建方法)。

在我的系统上,这变成

'C:\Users\Andreas Rejbrand\AppData\Roaming\Mariner\My Word Processor App\Settings\settings.ini'

您的安装程序(Inno Setup)内置支持将文件放置在此位置。


推荐阅读