无法在 Visual D 中使用“std.file.readText(fileName)”读取文本文件(抛出奇怪的异常)

Unable to read a text file using `std.file.readText(fileName)` in Visual D (throws strange exception)

异常详情为:

Unhandled exception at 0x00007FF7B11A7F40 in mutation_lib.exe: 0xC0000096: Privileged instruction.

它出现在标准库源代码的这一行:

void[] read(R)(R name, size_t upTo = size_t.max)
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) && !isInfinite!R &&
    !isConvertibleToString!R)
{
    static if (isNarrowString!R && is(immutable ElementEncodingType!R == immutable char))
        return readImpl(name, name.tempCString!FSChar(), upTo);  // (THIS LINE TRIGGERS EXCEPTION)
    else
        return readImpl(null, name.tempCString!FSChar(), upTo);
}

我传入的字符串是“prog9.asm”,它是一个与Dlanguage EXE在同一目录下的文件。

我检查了文件的编码,它是纯 ANSI / ASCII。

一个最小的异常抛出示例是这样的:

import std.stdio;
import std.file;

void main()
{
   while (true) {
      writeln("Enter a .asm file name: ");
      auto asmFileName = readln();
      auto asmSource = readText(asmFileName);
   }
}

更新。我已经追踪到它了。如果我在与 EXE 相同的目录中的 windows 资源管理器中创建一个新的 test.txt。然后我按字面意义传入字符串“test.txt”(不使用字符串变量),然后它就起作用了。

那么问题是如何从命令行解析字符串然后将其传递给 readText()...

发现问题。在将其视为文件名之前,您需要从 asmFileName 中删除换行符:

import std.stdio;
import std.file;
import std.string;

void main()
{
   while (true) {
      writeln("Enter a .asm file name: ");
      string asmFileName = readln();
      asmFileName = strip(asmFileName);
      auto asmSource = readText(asmFileName);
   }
}