【发布时间】:2021-12-26 08:54:48
【问题描述】:
我正在用 ada 编写一个哈希程序,并使用直接 io 来读取和写入文件。我正在尝试从与可执行文件位于同一文件夹中的文件中读取文件,但仍会引发异常。关于为什么它仍然提出这个例外的任何想法? adb showing exceptiondriverads file
【问题讨论】:
-
请将您的文字作为问题中的文字发布,而不是图片。 How to ask
我正在用 ada 编写一个哈希程序,并使用直接 io 来读取和写入文件。我正在尝试从与可执行文件位于同一文件夹中的文件中读取文件,但仍会引发异常。关于为什么它仍然提出这个例外的任何想法? adb showing exceptiondriverads file
【问题讨论】:
可执行文件的位置对要打开或创建的文件名的解释没有影响。相关问题是执行程序的进程的当前工作目录(或文件夹,如果您愿意的话)。在常见的操作系统中,要仅根据文件名(没有任何目录路径)找到文件,该文件必须位于当前工作目录中。
您似乎是在某个 IDE 中执行程序,对吧?那么 IDE 可能定义了当 IDE 执行程序时要使用的当前工作目录。您知道 IDE 是如何做到这一点的吗?您可以覆盖 IDE 中的默认设置吗?如果没有,我建议您从 shell 命令行执行程序,并根据需要在该 shell 窗口中手动设置当前工作目录,在执行程序之前使用“cd”命令。
【讨论】:
您可以使用Ada.Directories (ARM A.16) 从可执行文件的位置计算出数据文件的位置:
use Ada.Directories;
Program_Name : constant String := Ada.Command_Line.Command_Name;
Complete_Name : constant String := Full_Name (Program_Name);
Full_Directory : constant String := Containing_Directory (Complete_Name);
Source_File_Name : constant String
:= Compose (Containing_Directory => Full_Directory,
Name => "foo",
Extension => "txt");
注意,use Ada.Directories 意味着我必须对变量名称有点“创造性”;没有它,我可以说例如
Full_Name : constant String
:= Ada.Directories.Full_Name (Program_Name);
【讨论】: