diff --git "a/C:\\D\\dmd2\\src\\phobos\\std\\file.d" "b/C:\\src\\semantic\\source\\file.d"
index 2e07303..fd133c9 100644
--- "a/C:\\D\\dmd2\\src\\phobos\\std\\file.d"
+++ "b/C:\\src\\semantic\\source\\file.d"
@@ -1971,10 +1971,17 @@ private bool existsImpl(const(FSChar)* namez) @trusted nothrow @nogc
 {
     version (Windows)
     {
-        // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/
-        // fileio/base/getfileattributes.asp
-        return GetFileAttributesW(namez) != 0xFFFFFFFF;
-   }
+        WIN32_FIND_DATAW fd;
+        auto hFind = FindFirstFile( namez, &fd );
+
+        if ( hFind != INVALID_HANDLE_VALUE )
+        {
+            FindClose( hFind );
+            return true;
+        }
+
+        return false;
+    }
     else version (Posix)
     {
         /*
@@ -3784,22 +3791,47 @@ else version (Windows)
     public:
         alias name this;
 
-        this(string path)
+        this(string path) @trusted
         {
             import std.datetime.systime : FILETIMEToSysTime;
 
-            if (!path.exists())
-                throw new FileException(path, "File does not exist");
-
-            _name = path;
 
-            with (getFileAttributesWin(path))
+            if ( IsRootPath( path ))
             {
-                _size = makeUlong(nFileSizeLow, nFileSizeHigh);
-                _timeCreated = FILETIMEToSysTime(&ftCreationTime);
-                _timeLastAccessed = FILETIMEToSysTime(&ftLastAccessTime);
-                _timeLastModified = FILETIMEToSysTime(&ftLastWriteTime);
-                _attributes = dwFileAttributes;
+                _name = path;
+
+                with (getFileAttributesWin(path))
+                {
+                    _size = makeUlong(nFileSizeLow, nFileSizeHigh);
+                    _timeCreated = FILETIMEToSysTime(&ftCreationTime);
+                    _timeLastAccessed = FILETIMEToSysTime(&ftLastAccessTime);
+                    _timeLastModified = FILETIMEToSysTime(&ftLastWriteTime);
+                    _attributes = dwFileAttributes;
+                }
+            }
+            else
+            { 
+                import core.stdc.wchar_ : wcslen;
+                import std.conv : to;
+                import std.datetime.systime : FILETIMEToSysTime;
+                import std.path : buildPath;
+
+                WIN32_FIND_DATAW fd;
+
+                HANDLE hFind = FindFirstFileW(path.tempCString!FSChar(), &fd);
+                cenforce(hFind != INVALID_HANDLE_VALUE, path);
+
+                fd.cFileName[$ - 1] = 0;
+
+                size_t clength = wcslen(&fd.cFileName[0]);
+                _name = buildPath(path, fd.cFileName[0 .. clength].to!string);
+                _size = (cast(ulong) fd.nFileSizeHigh << 32) | fd.nFileSizeLow;
+                _timeCreated = FILETIMEToSysTime(&fd.ftCreationTime);
+                _timeLastAccessed = FILETIMEToSysTime(&fd.ftLastAccessTime);
+                _timeLastModified = FILETIMEToSysTime(&fd.ftLastWriteTime);
+                _attributes = fd.dwFileAttributes;
+
+                FindClose( hFind );
             }
         }
 
@@ -3884,6 +3916,76 @@ else version (Windows)
         ulong _size;       /// The size of the file in bytes.
         uint  _attributes; /// The file attributes from WIN32_FIND_DATAW.
     }
+
+
+    bool IsDosDriveLetter( wchar c )
+    {
+        if ( c >= 'A' && c <= 'Z' )
+        {
+            return true;
+        }
+
+        if ( c >= 'a' && c <= 'z' )
+        {
+            return true;
+        }
+
+        return false;
+    }
+
+
+    bool HasSlashes( string s )
+    {
+        foreach( c; s )
+        {
+            if ( c == '\\' )
+            {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+
+    bool IsRootPath( string path )
+    {
+        // File path formats on Windows systems:
+        //   https://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formats
+        // "\"
+        // "C:\"
+        // "\\.\C:\"
+        // "\\?\C:\"
+        // "\\.\Volume{b75e2c83-0000-0000-0000-602f00000000}\"
+        // "\\system07\C$\"
+
+        if ( path == "\\" )
+        {
+            return true;
+        }
+
+        if ( path.length == 3 && IsDosDriveLetter( path[ 0 ] ) && path[ 1 .. $ ] == ":\\" )
+        {
+            return true;
+        }
+
+        if ( path == "\\\\.\\" )
+        {
+            return true;
+        }
+
+        if ( path == "\\\\?\\" )
+        {
+            return true;
+        }
+
+        if ( path.length > 2 && path[ 0 .. 2 ] == "\\\\" && !HasSlashes( path[ 2 .. $ ] ) )
+        {
+            return true;
+        }
+
+        return false;
+    } 
 }
 else version (Posix)
 {
@@ -4176,6 +4278,28 @@ else version (Posix)
     }
 }
 
+@system unittest
+{
+    version (Windows)
+    {
+        if ("C:\\".exists)
+        {
+            auto de = DirEntry("C:\\");
+            assert(!de.isFile);
+            assert(de.isDir);
+            assert(!de.isSymlink);
+        }
+
+        if ("\\".exists)
+        {
+            auto de = DirEntry("\\");
+            assert(!de.isFile);
+            assert(de.isDir);
+            assert(!de.isSymlink);
+        }
+    }
+}
+
 alias PreserveAttributes = Flag!"preserveAttributes";
 
 version (StdDdoc)
