def file_copy(self, source, destination, flags):
        """Copies a file from one guest location to another.
        
        Will overwrite the destination file unless
        :py:attr:`FileCopyFlag.no_replace`  is specified.

        in source of type str
            The path to the file to copy (in the guest).  Guest path style.

        in destination of type str
            The path to the target file (in the guest).  This cannot be a
            directory.  Guest path style.

        in flags of type :class:`FileCopyFlag`
            Zero or more :py:class:`FileCopyFlag`  values.

        return progress of type :class:`IProgress`
            Progress object to track the operation to completion.

        raises :class:`OleErrorNotimpl`
            Not yet implemented.
        
        """
        if not isinstance(source, basestring):
            raise TypeError("source can only be an instance of type basestring")
        if not isinstance(destination, basestring):
            raise TypeError("destination can only be an instance of type basestring")
        if not isinstance(flags, list):
            raise TypeError("flags can only be an instance of type list")
        for a in flags[:10]:
            if not isinstance(a, FileCopyFlag):
                raise TypeError(
                        "array can only contain objects of type FileCopyFlag")
        progress = self._call("fileCopy",
                     in_p=[source, destination, flags])
        progress = IProgress(progress)
        return progress