func (fileMover FileMover) MoveFileWithPreservedPath(sourcePath string, sourceRoot string, destRoot string) (string, error) {
	relPath, err := filepath.Rel(sourceRoot, sourcePath)
	if err != nil {
		return "", err
	}
	destPath := filepath.Join(destRoot, relPath)
	if _, err = fileMover.MoveFileWithRename(sourcePath, destPath); err != nil {
		return "", err
	}
	return destPath, nil
}
// MoveFileWithPreservedPath moves the specified source file (which must have the given root) to the specified destination root.  Returns the destination path.
MoveFileWithPreservedPath moves the specified source file (which must have the given root) to the specified destination root.  Returns the destination path.
// MoveFileWithPreservedPath moves the specified source file ( which must have the given root ) to the specified destination root . Returns the destination path .
func (fileMover FileMover) MoveFileWithPreservedPath(sourcePath string, sourceRoot string, destRoot string) (string, error) {
	relPath, err := filepath.Rel(sourceRoot, sourcePath)
	if err != nil {
		return "", err
	}
	destPath := filepath.Join(destRoot, relPath)
	if _, err = fileMover.MoveFileWithRename(sourcePath, destPath); err != nil {
		return "", err
	}
	return destPath, nil
}
func ( fileMover FileMover ) MoveFileWithPreservedPath ( sourcePath string , sourceRoot string , destRoot string ) ( string , error ) { relPath , err := filepath . Rel ( sourceRoot , sourcePath ) if err != nil { return " " , err } destPath := filepath . Join ( destRoot , relPath ) if _ , err = fileMover . MoveFileWithRename ( sourcePath , destPath ) ; err != nil { return " " , err } return destPath , nil }
MoveFileWithPreservedPath moves the specified source file (which must have the given root) to the specified destination root.
MoveFileWithPreservedPath moves the specified source file ( which must have the given root ) to the specified destination root .