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); }
/// <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(); } }
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); }
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); }
/// <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); }
/// <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 }
/// <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 }