'Open C{path} for reading.
@param path: The path, as a list of segments, to open.
@type path: C{list} of C{unicode}
@return: A L{Deferred} is returned that will fire with an object
implementing L{IReadFile} if the file is successfully opened.  If
C{path} is a directory, or if an exception is raised while trying
to open the file, the L{Deferred} will fire with an error.'

def openForReading(self, path):

    p = self._path(path)
    if p.isdir():
        return defer.fail(IsADirectoryError(path))
    try:
        f = p.open('r')
    except (IOError, OSError) as e:
        return errnoToFailure(e.errno, path)
    except:
        return defer.fail()
    else:
        return defer.succeed(_FileReader(f))
