Click or drag to resize

IHierarchyItemCopyTo Method

IT Hit WebDAV Classes Reference
Creates a copy of this item with a new name in the destination folder.

Namespace: ITHit.WebDAV.Server
Assembly: ITHit.WebDAV.Server (in ITHit.WebDAV.Server.dll) Version: 4.5.3121.0
void CopyTo(
	IItemCollection destFolder,
	string destName,
	bool deep,
	MultistatusException multistatus


Type: ITHit.WebDAV.ServerIItemCollection
Destination folder.
Type: SystemString
Name of the destination item.
Type: SystemBoolean
Indicates whether to copy entire subtree.
Type: ITHit.WebDAV.ServerMultistatusException
If some items fail to copy but operation in whole shall be continued, add information about the error into multistatus using AddInnerException(String, DavException).

Return Value

LockedExceptionDestination item was locked and client did not provide lock token.
NeedPrivilegesExceptionThe user doesn't have enough privileges.
InsufficientStorageExceptionQuota limit is reached.
MultistatusExceptionErrors has occured during processing of item in the subtree and whole operation shall be aborted.
DavExceptionIn other cases. Possible status value is CONFLICT if destination folder doesn't exist.

If error occurred while copying file located in a subtree, the server should try to continue copy operation and copy all other items. In this case you must add that error multistatus container.

A CopyTo method invocation must not copy any locks active on the source item. However, if this method copies the item into a folder that has a deep lock, then the destination item must be added to the lock.

Example of CopyTo implementation for WebDAV Class 2 server:

The code below is part of 'WebDAVServer.NtfsStorage' sample provided with the SDK.

public override void CopyTo(IItemCollection destFolder, string destName, bool deep, MultistatusException multistatus)
        () => copyToInternal(destFolder, destName, multistatus));

private void copyToInternal(IItemCollection folder, string destName, MultistatusException multistatus)
    var targetFolder = (DavFolder)folder;

    if (targetFolder == null || !Directory.Exists(targetFolder.GetFullPath()))
        throw new DavException("Target directory doesn't exist", DavStatus.CONFLICT);

    var newDirPath = System.IO.Path.Combine(targetFolder.GetFullPath(), destName);
    var targetPath = targetFolder.Path + EncodeUtil.EncodeUrlPart(destName);

    //If an item with the same name exists - remove it.
        IHierarchyItem item = context.GetHierarchyItem(targetPath);
        if (item != null)
    catch (DavException ex)
        //Report error with other item to client.
        multistatus.AddInnerException(targetPath, ex);

    //Copy the file.
        File.Copy(fileSystemInfo.FullName, newDirPath);

        DeleteStream(newDirPath, "Locks");
    catch (UnauthorizedAccessException)
        var ex = new NeedPrivilegesException("Not enough privileges");
        string parentPath = System.IO.Path.GetDirectoryName(Path);
        ex.AddRequiredPrivilege(parentPath, Privilege.Bind);
        throw ex;
See Also