isDir won't throw FileException with dirEntries

Jonathan M Davis jmdavisProg at gmx.com
Tue Aug 30 11:17:27 PDT 2011


On Tuesday, August 30, 2011 11:04 Nick Treleaven wrote:
> On 30/08/2011 19:02, Nick Treleaven wrote:
> > On 30/08/2011 18:54, Jonathan M Davis wrote:
> >> On Tuesday, August 30, 2011 10:39 Nick Treleaven wrote:
> >>> Hi,
> >>> With the attached source file on Windows, dmd 2.054, I'm not getting an
> >>> exception when the path doesn't exist. If I uncomment the foreach line,
> >>> the exception is thrown. Should I file this in bugzilla?
> >> 
> >> So, what exactly is the problem? Is the issue that isDir isn't
> >> throwing or
> >> that dirEntries isn't throwing? isDir should definitely throw if the
> >> path doesn't exist, but I'm not sure that dirEntries will.
> > 
> > The problem is that isDir doesn't throw - the documentation says:
> > "Throws: FileException if the given file does not exist. "
> > 
> > If I remove the foreach/dirEntries then isDir does throw.
> 
> BTW, I meant to say 'comment the foreach line' in my first post, sorry
> for the confusion...

So, you're saying that

import std.file;

void main(string[] args)
{
 auto path = args[1];

 if (!path.isDir())
 {
 }

 //foreach (DirEntry f; dirEntries(path, SpanMode.depth))
 {
 }
}

fails to throw on your system, whereas

import std.file;

void main(string[] args)
{
 auto path = args[1];

 if (!path.isDir())
 {
 }

 foreach (DirEntry f; dirEntries(path, SpanMode.depth))
 {
 }
}

_does_ throw? If so, that's a compiler bug. The foreach should have _zero_ 
effect on the statements before it - save for stuff like scope statements.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list