SharpCifs.Smb.SmbFile.CopyTo C# (CSharp) Method

CopyTo() public method

This method will copy the file or directory represented by this SmbFile and it's sub-contents to the location specified by the dest parameter.
This method will copy the file or directory represented by this SmbFile and it's sub-contents to the location specified by the dest parameter. This file and the destination file do not need to be on the same host. This operation does not copy extended file attibutes such as ACLs but it does copy regular attributes as well as create and last write times. This method is almost twice as efficient as manually copying as it employs an additional write thread to read and write data concurrently.

It is not possible (nor meaningful) to copy entire workgroups or servers.

SmbException
public CopyTo ( SmbFile dest ) : void
dest SmbFile the destination file or directory
return void
        public virtual void CopyTo(SmbFile dest)
        {
            SmbComReadAndX req;
            SmbComReadAndXResponse resp;
            WriterThread w;
            int bsize;
            byte[][] b;
            if (_share == null || dest._share == null)
            {
                throw new SmbException("Invalid operation for workgroups or servers");
            }
            req = new SmbComReadAndX();
            resp = new SmbComReadAndXResponse();
            Connect0();
            dest.Connect0();
            ResolveDfs(null);
            try
            {
                if (GetAddress().Equals(dest.GetAddress()) && _canon.RegionMatches(true, 0, dest._canon
                    , 0, Math.Min(_canon.Length, dest._canon.Length)))
                {
                    throw new SmbException("Source and destination paths overlap.");
                }
            }
            catch (UnknownHostException)
            {
            }
            w = new WriterThread(this);
            w.SetDaemon(true);
            w.Start();
            SmbTransport t1 = Tree.Session.transport;
            SmbTransport t2 = dest.Tree.Session.transport;
            if (t1.SndBufSize < t2.SndBufSize)
            {
                t2.SndBufSize = t1.SndBufSize;
            }
            else
            {
                t1.SndBufSize = t2.SndBufSize;
            }
            bsize = Math.Min(t1.RcvBufSize - 70, t1.SndBufSize - 70);
            b = new[] { new byte[bsize], new byte[bsize] };
            try
            {
                CopyTo0(dest, b, bsize, w, req, resp);
            }
            finally
            {
                w.Write(null, -1, null, 0);
            }
        }