Example #1
0
        private void OnUploaded(object sender, FTPFileTransferEventArgs e)
        {
            if (OnTransfering == null)
            {
                return;
            }

            Status status = e.Cancel ? Status.Canceled : (e.Succeeded ? Status.Finished : Status.Failed);

            #region 怀疑 edtFtp 组件的完成状态判断有 BUG,这里多校验一次

            if (status == Status.Finished)
            {
                if (e.RemoteFileSize != e.LocalFileSize)
                {
                    status = Status.Failed;
                }
            }

            #endregion

            TransferEventArgs arg = new TransferEventArgs();
            arg.TransferStatus  = status;
            arg.FileSize        = this.FileSize;
            arg.TransferredSize = this.TransferredSize;
            arg.Exception       = e.Exception;

            OnTransfering(sender, arg);
        }
Example #2
0
        /// <summary>
        /// 传输过程的委托时间
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void On_Transfering(object sender, TransferEventArgs e)
        {
            _TransferStatus  = e.TransferStatus;
            _FileSize        = e.FileSize;
            _TransferredSize = e.TransferredSize;
            _Exception       = e.Exception;

            if ((e.TransferStatus != Status.Connecting) && (e.TransferStatus != Status.Transfering))
            {
                ftp.AsynchronousDisconnect();
            }
        }
Example #3
0
        private void OnBytesTransferred(object sender, BytesTransferredEventArgs e)
        {
            if (OnTransfering == null)
            {
                return;
            }

            this.TransferredSize = this.TargetOriginalFileSize + e.ByteCount;

            TransferEventArgs arg = new TransferEventArgs();

            arg.TransferStatus  = Status.Transfering;
            arg.FileSize        = this.FileSize;
            arg.TransferredSize = this.TransferredSize;
            arg.Exception       = null;

            OnTransfering(sender, arg);
        }
Example #4
0
        private void OnUploading(object sender, FTPFileTransferEventArgs e)
        {
            if (OnTransfering == null)
            {
                return;
            }

            this.FileSize = e.LocalFileSize;
            this.TargetOriginalFileSize = e.Append ? e.RemoteFileSize : 0;

            TransferEventArgs arg = new TransferEventArgs();

            arg.TransferStatus  = Status.Transfering;
            arg.FileSize        = this.FileSize;
            arg.TransferredSize = this.TransferredSize;
            arg.Exception       = e.Exception;

            OnTransfering(sender, arg);
        }
Example #5
0
        /// <summary>
        /// 连接 FTP 服务器
        /// </summary>
        /// <returns></returns>
        public bool Connect()
        {
            this.FileSize               = 0;
            this.TransferredSize        = 0;
            this.TargetOriginalFileSize = 0;

            TransferEventArgs arg = new TransferEventArgs();

            if (OnTransfering != null)
            {
                arg.TransferStatus  = Status.Connecting;
                arg.FileSize        = 0;
                arg.TransferredSize = 0;
                arg.Exception       = null;

                OnTransfering(this.m_pFtp, arg);
            }

            try
            {
                m_pFtp.Connect();
            }
            catch (Exception e)
            {
                if (OnTransfering != null)
                {
                    arg.TransferStatus  = Status.Failed;
                    arg.FileSize        = 0;
                    arg.TransferredSize = 0;
                    arg.Exception       = e;

                    OnTransfering(this.m_pFtp, arg);
                }
                else
                {
                    throw e;
                }
            }

            return(m_pFtp.IsConnected);
        }
Example #6
0
        /// <summary>
        /// 异步下载文件
        /// </summary>
        /// <param name="localFileName"></param>
        /// <param name="remoteFileName"></param>
        /// <param name="mode"></param>
        public void _AsynchronousDownload(string localFileName, string remoteFileName, OverrideMode mode)
        {
            TransferEventArgs arg = new TransferEventArgs();
            long localFileSize    = 0;
            long remoteFileSize   = 0;
            bool localExists      = false;
            bool remoteExists     = false;

            #region Get remote file information.

            try
            {
                remoteExists = FileExists(remoteFileName);
            }
            catch (Exception e)
            {
                if (OnTransfering != null)
                {
                    arg.TransferStatus  = Status.Failed;
                    arg.FileSize        = 0;
                    arg.TransferredSize = 0;
                    arg.Exception       = e;

                    OnTransfering(this, arg);

                    return;
                }

                throw e;
            }

            if (!remoteExists)
            {
                if (OnTransfering != null)
                {
                    arg.TransferStatus  = Status.Failed;
                    arg.FileSize        = 0;
                    arg.TransferredSize = 0;
                    arg.Exception       = new Exception("远程文件 " + remoteFileName + " 不存在。");

                    OnTransfering(this, arg);

                    return;
                }

                throw new Exception("远程文件 " + remoteFileName + " 不存在。");
            }

            try
            {
                remoteFileSize = GetFileSize(remoteFileName);
            }
            catch (Exception e)
            {
                if (OnTransfering != null)
                {
                    arg.TransferStatus  = Status.Failed;
                    arg.FileSize        = 0;
                    arg.TransferredSize = 0;
                    arg.Exception       = e;

                    OnTransfering(this, arg);

                    return;
                }

                throw e;
            }

            #endregion

            #region Get local file information.

            FileInfo fi = new FileInfo(localFileName);
            localExists = fi.Exists;

            if (localExists)
            {
                localFileSize = fi.Length;
            }

            #endregion

            #region If local file is exists and wanring then return.

            if (localExists && (mode == OverrideMode.Wanring))
            {
                if (OnTransfering != null)
                {
                    arg.TransferStatus  = Status.Exists;
                    arg.FileSize        = 0;
                    arg.TransferredSize = 0;
                    arg.Exception       = new Exception("本地文件 " + localFileName + " 已存在。");

                    OnTransfering(this, arg);

                    return;
                }

                throw new Exception("本地文件 " + localFileName + " 已存在。");
            }

            #endregion

            #region Resume but local file is not exists.

            if ((mode == OverrideMode.Resume) && (!localExists))
            {
                if (OnTransfering != null)
                {
                    arg.TransferStatus  = Status.Failed;
                    arg.FileSize        = 0;
                    arg.TransferredSize = 0;
                    arg.Exception       = new Exception("本地文件 " + localFileName + " 不存在。");

                    OnTransfering(this, arg);

                    return;
                }

                throw new Exception("本地文件 " + localFileName + " 不存在。");
            }

            #endregion

            #region Local file be using.

            if (FileUsing(localFileName))
            {
                if (OnTransfering != null)
                {
                    arg.TransferStatus  = Status.Using;
                    arg.FileSize        = 0;
                    arg.TransferredSize = 0;
                    arg.Exception       = new Exception("本地文件 " + localFileName + " 被占用。");

                    OnTransfering(this, arg);

                    return;
                }

                throw new Exception("本地文件 " + localFileName + " 被占用。");
            }

            #endregion

            #region Resume

            if (mode == OverrideMode.Resume)
            {
                if (localFileSize == remoteFileSize)
                {
                    if (OnTransfering != null)
                    {
                        arg.TransferStatus  = Status.Finished;
                        arg.FileSize        = remoteFileSize;
                        arg.TransferredSize = remoteFileSize;
                        arg.Exception       = null;

                        OnTransfering(this, arg);
                    }

                    return;
                }
                else if (localFileSize > remoteFileSize)
                {
                    if (OnTransfering != null)
                    {
                        arg.TransferStatus  = Status.Failed;
                        arg.FileSize        = 0;
                        arg.TransferredSize = 0;
                        arg.Exception       = new Exception("本地文件 " + localFileName + " 大小异常。");

                        OnTransfering(this, arg);

                        return;
                    }

                    throw new Exception("本地文件 " + localFileName + " 大小异常。");
                }

                try
                {
                    m_pFtp.ResumeNextTransfer();
                    m_pFtp.DownloadFile(localFileName, remoteFileName);
                    m_pFtp.CancelResume();
                }
                catch (Exception e)
                {
                    if (OnTransfering != null)
                    {
                        arg.TransferStatus  = Status.Failed;
                        arg.FileSize        = this.FileSize;
                        arg.TransferredSize = this.TransferredSize;
                        arg.Exception       = e;

                        OnTransfering(this, arg);

                        return;
                    }

                    throw e;
                }

                return;
            }

            #endregion

            #region Delete local file when local is exists.

            if (localExists)
            {
                try
                {
                    System.IO.File.Delete(localFileName);
                }
                catch (Exception e)
                {
                    if (OnTransfering != null)
                    {
                        arg.TransferStatus  = Status.Failed;
                        arg.FileSize        = this.FileSize;
                        arg.TransferredSize = this.TransferredSize;
                        arg.Exception       = e;

                        OnTransfering(this, arg);

                        return;
                    }

                    throw e;
                }
            }

            #endregion

            #region Create local dir

            if (!localExists)
            {
                string path = Path.GetDirectoryName(localFileName);

                if (!Directory.Exists(path))
                {
                    try
                    {
                        Directory.CreateDirectory(path);
                    }
                    catch (Exception e)
                    {
                        if (OnTransfering != null)
                        {
                            arg.TransferStatus  = Status.Failed;
                            arg.FileSize        = 0;
                            arg.TransferredSize = 0;
                            arg.Exception       = e;

                            OnTransfering(this, arg);

                            return;
                        }

                        throw e;
                    }
                }
            }

            #endregion

            #region Download file.

            try
            {
                m_pFtp.CancelResume();
                m_pFtp.DownloadFile(localFileName, remoteFileName);
            }
            catch (Exception e)
            {
                if (OnTransfering != null)
                {
                    arg.TransferStatus  = Status.Failed;
                    arg.FileSize        = this.FileSize;
                    arg.TransferredSize = this.TransferredSize;
                    arg.Exception       = e;

                    OnTransfering(this, arg);

                    return;
                }

                throw e;
            }

            #endregion
        }
Example #7
0
        /// <summary>
        /// 异步上传文件
        /// </summary>
        /// <param name="localFileName"></param>
        /// <param name="remoteFileName"></param>
        /// <param name="mode"></param>
        public void _AsynchronousUpdate(string localFileName, string remoteFileName, OverrideMode mode)
        {
            TransferEventArgs arg = new TransferEventArgs();
            long LocalFileSize    = 0;
            long RemoteFileSize   = 0;
            bool localExists      = false;
            bool remoteExists     = false;

            #region Get local file information.

            FileInfo fi = new FileInfo(localFileName);
            localExists = fi.Exists;

            if (!localExists)
            {
                if (OnTransfering != null)
                {
                    arg.TransferStatus  = Status.Failed;
                    arg.FileSize        = 0;
                    arg.TransferredSize = 0;
                    arg.Exception       = new Exception("本地文件 " + localFileName + " 不存在。");

                    OnTransfering(this, arg);

                    return;
                }

                throw new Exception("本地文件 " + localFileName + " 不存在。");
            }

            LocalFileSize = fi.Length;

            #endregion

            #region Get remote file is exists.

            try
            {
                remoteExists = FileExists(remoteFileName);
            }
            catch (Exception e)
            {
                if (OnTransfering != null)
                {
                    arg.TransferStatus  = Status.Failed;
                    arg.FileSize        = 0;
                    arg.TransferredSize = 0;
                    arg.Exception       = e;

                    OnTransfering(this, arg);

                    return;
                }

                throw e;
            }

            #endregion

            #region If remote file is exists and wanring then return.

            if ((remoteExists) && (mode == OverrideMode.Wanring))
            {
                if (OnTransfering != null)
                {
                    arg.TransferStatus  = Status.Exists;
                    arg.FileSize        = 0;
                    arg.TransferredSize = 0;
                    arg.Exception       = new Exception("远程文件 " + remoteFileName + " 已存在。");

                    OnTransfering(this, arg);

                    return;
                }

                throw new Exception("远程文件 " + remoteFileName + " 已存在。");
            }

            #endregion

            #region Get remote file size.

            if (remoteExists)
            {
                try
                {
                    RemoteFileSize = GetFileSize(remoteFileName);
                }
                catch (Exception e)
                {
                    if (OnTransfering != null)
                    {
                        arg.TransferStatus  = Status.Failed;
                        arg.FileSize        = 0;
                        arg.TransferredSize = 0;
                        arg.Exception       = e;

                        OnTransfering(this, arg);

                        return;
                    }

                    throw e;
                }
            }

            #endregion

            #region Resume but remote file is not exists.

            if ((mode == OverrideMode.Resume) && (!remoteExists))
            {
                if (OnTransfering != null)
                {
                    arg.TransferStatus  = Status.Failed;
                    arg.FileSize        = 0;
                    arg.TransferredSize = 0;
                    arg.Exception       = new Exception("远程文件 " + remoteFileName + " 不存在。");

                    OnTransfering(this, arg);

                    return;
                }

                throw new Exception("远程文件 " + remoteFileName + " 不存在。");
            }

            #endregion

            #region Resume

            if (mode == OverrideMode.Resume)
            {
                if (RemoteFileSize == LocalFileSize)
                {
                    if (OnTransfering != null)
                    {
                        arg.TransferStatus  = Status.Finished;
                        arg.FileSize        = LocalFileSize;
                        arg.TransferredSize = LocalFileSize;
                        arg.Exception       = null;

                        OnTransfering(this, arg);
                    }

                    return;
                }
                else if (RemoteFileSize > LocalFileSize)
                {
                    if (OnTransfering != null)
                    {
                        arg.TransferStatus  = Status.Failed;
                        arg.FileSize        = 0;
                        arg.TransferredSize = 0;
                        arg.Exception       = new Exception("远程文件 " + remoteFileName + " 大小异常。");

                        OnTransfering(this, arg);

                        return;
                    }

                    throw new Exception("远程文件 " + remoteFileName + " 大小异常。");
                }

                try
                {
                    m_pFtp.ResumeNextTransfer();
                    m_pFtp.UploadFile(localFileName, remoteFileName);
                    m_pFtp.CancelResume();
                }
                catch (Exception e)
                {
                    if (OnTransfering != null)
                    {
                        arg.TransferStatus  = Status.Failed;
                        arg.FileSize        = 0;
                        arg.TransferredSize = 0;
                        arg.Exception       = e;

                        OnTransfering(this, arg);

                        return;
                    }

                    throw e;
                }

                return;
            }

            #endregion

            #region Delete remote file when remote is exists.

            if (remoteExists)
            {
                try
                {
                    DeleteFile(remoteFileName);
                }
                catch (Exception e)
                {
                    if (OnTransfering != null)
                    {
                        arg.TransferStatus  = Status.Failed;
                        arg.FileSize        = this.FileSize;
                        arg.TransferredSize = this.TransferredSize;
                        arg.Exception       = e;

                        OnTransfering(this, arg);

                        return;
                    }

                    throw e;
                }
            }

            #endregion

            #region Create remote dir

            if (!remoteExists)
            {
                string path = Path.GetDirectoryName(remoteFileName).Replace('\\', '/').TrimStart('/');

                try
                {
                    if (!DirectoryExists(path))
                    {
                        CreateDirectory(path);
                    }
                }
                catch (Exception e)
                {
                    if (OnTransfering != null)
                    {
                        arg.TransferStatus  = Status.Failed;
                        arg.FileSize        = this.FileSize;
                        arg.TransferredSize = this.TransferredSize;
                        arg.Exception       = e;

                        OnTransfering(this, arg);

                        return;
                    }

                    throw e;
                }
            }

            #endregion

            #region Upload file.

            try
            {
                m_pFtp.CancelResume();
                m_pFtp.UploadFile(localFileName, remoteFileName);
            }
            catch (Exception e)
            {
                if (OnTransfering != null)
                {
                    arg.TransferStatus  = Status.Failed;
                    arg.FileSize        = this.FileSize;
                    arg.TransferredSize = this.TransferredSize;
                    arg.Exception       = e;

                    OnTransfering(this, arg);

                    return;
                }

                throw e;
            }

            #endregion
        }