Delphi 获取文件位置

Posted

技术标签:

【中文标题】Delphi 获取文件位置【英文标题】:Delphi Get file location 【发布时间】:2014-06-18 09:51:41 【问题描述】:

要确定我的 exe 路径,我不知道应该使用哪个代码。 请给我解释何时以及为什么我们应该使用:

1. ExtractFilePath(ParamStr(0))

2. ExtractFilePath(Application.ExeName)

因为两个代码都呈现相同的输出。

C:\Users\Bianca\Documents\RAD Studio\Projects\Exam1\Win32\Release\
C:\Users\Bianca\Documents\RAD Studio\Projects\Exam1\Win32\Release\

【问题讨论】:

Application.ExeName getter 内部调用 ParamStr(0) 那么,选项 2 总是首选? 这是没有人能说的。如果您不想依赖Application 对象(需要包含Forms 单元并要求您的应用程序是VCL 表单应用程序),请使用ParamStr(0)。如果您有一个 VCL 表单应用程序,并且不介意包含 Forms 单元,则可以使用可读性更好的 Application.ExeName。我更喜欢ParamStr(0) 谢谢@TLama 现在我很清楚了。 ;) 我认为如果应用程序在网络共享上,ParamStr(0) 不会很好地执行。 【参考方案1】:

它们都给你相同的结果,但有细微的差别。

Application.ExeName 引用 VCL 应用程序对象。使用此属性需要您使用 Vcl.Forms 单元。这在内部确实调用了 ParamStr(0) 函数。

请注意,FireMonkey TApplication 类没有此属性(从 XE5 开始)。因此,如果您使用 FireMonkey,则不能调用 Application.ExeName。如果你曾经将 VCL 项目迁移到 FireMonkey,你将不得不重写它。

ParamStr 函数 OTOH 是系统单元并且是多平台的(Win、Mac、iosandroid,取决于您使用的 Delphi 版本的 OC)。在 Windows 上 ParamStr(0) 调用 GetModuleFileName 函数,而在其他平台上,它解析返回第一个标记的命令行,该标记应该是完整路径和正在运行的可执行文件的名称。 (感谢 Rob Kennedy 的更正)

所以...我建议你直接使用 ParamStr(0)。

【讨论】:

谢谢@frazz,非常清楚的解释。非常感谢;) ParamStr(0) 不返回“执行命令的第一个参数”。您正在考虑 Unix 和 C 的 argv 数组,其中操作系统和运行时简单地将任何任意值转发给 execv,希望它是程序名称。在Delphi中,该函数对0进行特殊处理,并调用GetModuleFileName直接获取EXE文件的名称(在Windows上,反正我不知道它在其他平台上的实现)。 感谢指出,我已经检查了代码并更新了答案。【参考方案2】:

它们在功能上是相同的。如果您不想要 Forms 单元的开销和所有它的包袱,您将使用 ParamStr(0)

【讨论】:

以上是关于Delphi 获取文件位置的主要内容,如果未能解决你的问题,请参考以下文章

delphi 如何获取文件的大小和类型

delphi如何获取鼠标当前位置颜色

delphi获取文件路径

Delphi 快速获取文件大小

delphi获取目录下所有文件名

Delphi GetCurrentDir 获取当前文件夹