You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual D调用std.file.readText读文件抛出特权指令异常如何解决

问题解决方法

你遇到的异常是readln()返回值的两个特性导致的,按照以下步骤修改即可正常运行:

  1. 导入std.string工具库处理输入字符串
  2. 对readln()的返回值做两步处理:
    • 调用strip()去除首尾空白字符,重点是清除输入末尾附带的换行/回车符
    • 调用idup将可变的char[]转换为不可变的string类型,匹配readText的参数要求

修改后的可运行代码

import std.stdio;
import std.file;
import std.string; // 新增导入,用于strip方法

void main()
{
   while (true) {
      writeln("Enter a .asm file name: ");
      // 处理输入字符串:去首尾空白 + 转不可变字符串
      auto asmFileName = readln().strip().idup;
      // 可选:增加空输入判断避免无效请求
      if (asmFileName.length == 0) {
          writeln("文件名不能为空,请重新输入");
          continue;
      }
      auto asmSource = readText(asmFileName);
      writeln("读取成功,文件长度:", asmSource.length);
   }
}

异常原因说明

  • 你直接传入字面量字符串时,路径完全匹配文件系统中的文件名,所以可以正常运行。
  • 通过readln()读取的输入默认会包含你按下回车时输入的换行符(Windows下为\r\n,类Unix下为\n),导致实际传入readText的文件名是"prog9.asm\r\n",和实际文件名不匹配,触发文件不存在的错误。
  • D运行时遇到不可恢复的IO错误时,会主动触发UD2非法指令终止程序,对应你看到的0xC0000096 特权指令异常。

内容的提问来源于stack exchange,提问作者UniversalBasicIncomeSupporter8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:12:03