【问题标题】:The system cannot find the file specified该系统找不到指定的文件
【发布时间】:2015-04-26 09:08:33
【问题描述】:

该文件位于软件所在的目录中。我正在尝试将文本文件添加到备忘录框。

procedure TForm4.FormCreate(Sender: TObject);
var
  dir : string;
begin
  Form4.Caption:='Abateri instrumente';
  dir := GetCurrentDir;
  Memo1.Lines.LoadFromFile(dir+'\abateri.txt');
end;

【问题讨论】:

  • 使用例如Memo1.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'abateri.txt');.
  • 我得到完全相同的错误:“Exception EFopenerrro”“系统找不到指定的文件”
  • 没有EFopenerrro 异常。如果您想获得帮助,请具体说明。
  • 抱歉我打错了'EfOpenError' 这是截图i.imgur.com/ca0suo1.png
  • 尝试 LoadFromFile(dir+'\abateri.txt.txt')。在您的屏幕截图中,项目文件的扩展名是隐藏的,这意味着您可以选择隐藏已知的文件扩展名,但文本文件的扩展名会显示。

标签: file delphi path


【解决方案1】:

在您的具体情况下,您应该使用代码加载文件

Memo1.Lines.LoadFromFile(dir+'\abateri.txt.txt');

这是因为在您提供的以下屏幕截图中,Project3 文件的扩展名是隐藏的,这会得出结论,即启用了隐藏已知文件扩展名的选项。但是显示了abateri.txt文件的那个,这只会导致经常出现的双扩展错误。

重命名文件并删除多余部分(首选 .txt 文件)或在代码中使用双扩展名。
我还建议在 Windows 资源管理器中禁用该选项:
Tools > Folder Options > View > 取消选中“隐藏已知文件的扩展名”类型”

除了上述之外,您应该始终使用TPath.Combine 函数调用来构建路径,以确保它们是正确的。 你可以看到它的文档here

【讨论】:

  • 不,你应该停止使用GetCurrentDir函数来获取应用程序目录(你可以通过调用SetCurrentDirectory来打破它)。但是很好地抓住了那个扩展错字!
  • 出色的结论。我也完全支持您关于取消隐藏已知文件类型扩展名的建议
  • @TLama,我完全同意。在当今时代,永远不要使用应用程序目录,太多的 UAC 问题。应该使用AppData 文件夹来写入/读取自我维护的文件
  • 绝对!但我的观点更多地是关于 GetCurrentDir 对此目的不可靠。
  • 很好,我真的忘了我有隐藏文件扩展名,因为我刚刚安装了一个新硬盘,谢谢,现在我终于完成了我的第一个软件:D
【解决方案2】:

该文件位于软件所在的目录中。

在这种情况下,查看工作目录是错误的方法。工作目录没有理由应该是可执行文件所在的目录。你需要使用:

Dir := ExtractFilePath(ParamStr(0)); // the directory where the executable resides
TPath.Combine(Dir, FileName); // TPath is from the System.IOUtils unit

当然,您的另一个问题是您的文件名错误。该文件实际上名为abateri.txt.txt

【讨论】:

    猜你喜欢
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2012-02-05
    • 2013-11-21
    相关资源
    最近更新 更多