【问题标题】:No such file or directory无此文件或目录
【发布时间】:2021-12-26 08:54:48
【问题描述】:

我正在用 ada 编写一个哈希程序,并使用直接 io 来读取和写入文件。我正在尝试从与可执行文件位于同一文件夹中的文件中读取文件,但仍会引发异常。关于为什么它仍然提出这个例外的任何想法? adb showing exceptiondriverads file

【问题讨论】:

  • 请将您的文字作为问题中的文字发布,而不是图片。 How to ask

标签: hash ada gnat


【解决方案1】:

可执行文件的位置对要打开或创建的文件名的解释没有影响。相关问题是执行程序的进程的当前工作目录(或文件夹,如果您愿意的话)。在常见的操作系统中,要仅根据文件名(没有任何目录路径)找到文件,该文件必须位于当前工作目录中。

您似乎是在某个 IDE 中执行程序,对吧?那么 IDE 可能定义了当 IDE 执行程序时要使用的当前工作目录。您知道 IDE 是如何做到这一点的吗?您可以覆盖 IDE 中的默认设置吗?如果没有,我建议您从 shell 命令行执行程序,并根据需要在该 shell 窗口中手动设置当前工作目录,在执行程序之前使用“cd”命令。

【讨论】:

  • 我已将命令行中的方向更改为正确的目录。我认为它正在定位文件,但现在它给了我“引发 ADA.IO_EXCEPTIONS.END_ERROR : s-direio.adb:200”。
  • 因此程序试图读取文件末尾之后的内容,出于某种原因,我们无法在不查看更多程序的情况下尝试理解 - 至少是读取文件的部分。
【解决方案2】:

您可以使用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);

【讨论】:

    猜你喜欢
    • 2020-08-07
    • 2021-03-28
    • 2020-07-28
    • 2020-04-18
    • 2016-07-01
    • 2018-05-28
    • 2021-12-19
    相关资源
    最近更新 更多