I played a little with it

int f(string fileName = r"someExistingPath") {
   auto text = read(fileName);
   return text.length;
}

void main()
{
  try {
      string fileName = r"someExistingPath";
      if(exists(fileName))
         writeln("File '", fileName, "' does exist.");
      auto text = read(fileName);
      writeln(text.length);

      writeln(f);  // **** EXCEPTION HERE
   }
   catch (Exception e) {
      writeln(e);
   }

   writeln(f);
}

As you see, I mistrustingly inserted a dumb exist test before attempting to read.

Here's what I came up with (on linux):

- trying with filename r"~/text.txt" (i.e. an existing file in my home dir) it FAILED.

- trying with the same filename but this time home dir explicitely written out fully (r"/home/me/test.txt) it WORKED.

- your code did NOT throw where you say it does ("writeln(f)") but actually in the read call.

Conclusion: I assume D's OS path related mechanisms to be somewhat dumb. Anyway the code throws where it's supposed to, i.e. when confronted with a non existing (or not recognized?) path.

Reply via email to