/// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="ftpAddress"></param>
        /// <param name="remoteFilename"></param>
        /// <param name="localFilename"></param>
        /// <param name="resumeOperation"></param>
        public bool UploadFile(string ftpAddress, string localFilename, string remoteFilename, bool resumeOperation)
        {
            FtpSiteData siteData = ParseFtpAddress(ftpAddress);

            if (siteData == null)
            {
                throw new ArgumentException("Invalid ftp address format!");
            }

            using (FtpConnection connection = new FtpConnection(siteData.Host, siteData.Port, siteData.UserName, siteData.Password))
            {
                SetConnection(connection);

                AbstractFolder remoteFolder = new FtpFolder(connection);
                AbstractFile   remoteFile   = remoteFolder.GetFile(remoteFilename);

                AbstractFile localFile = new DiskFile(localFilename);

                if (!resumeOperation || !remoteFile.Exists || remoteFile.Size > localFile.Size)
                {
                    localFile.CopyTo(remoteFile, true);
                }
                else if (remoteFile.Size == localFile.Size)
                {
                    return(true);
                }
                else if (remoteFile.Size < localFile.Size)
                {
                    byte[] buf = new byte[1024];
                    int    cnt = -1;

                    using (System.IO.Stream remoteStream = remoteFile.OpenWrite(false))
                    {
                        using (System.IO.Stream localStream = localFile.OpenRead())
                        {
                            localStream.Seek(remoteFile.Size, System.IO.SeekOrigin.Begin);
                            // can't seek. OpenWrite如果不overwrite自动append
                            //remoteStream.Seek(0, System.IO.SeekOrigin.End);

                            do
                            {
                                cnt = localStream.Read(buf, 0, buf.Length);
                                remoteStream.Write(buf, 0, cnt);
                            } while (cnt == buf.Length);
                        }
                    }
                }

                return(true);
            }

            //FtpClient client = LoginFtp(ftpAddress);
            //client.SendFile(localFilename, remoteFilename);
        }
Example #2
0
        public void ConnectToSite(FtpSiteData siteData)
        {
            UnbindCurrentFtpSiteEvent();

            CurrentFtpClient = siteData.GetFtpClient();
            this.Invoke(new ThreadHelper.UnnamedDelegate(delegate
            {
                btnQuickConnect.Enabled = false;
                SetLvRemoteFileGray(false);

                BindCurrentFtpSiteEvent();
            }));

            var site = CurrentFtpClient;

            site.BeginLogin();
        }
Example #3
0
        private void btnAddSite_Click(object sender, EventArgs e)
        {
            if (CheckSiteSettingChanged(sender) == System.Windows.Forms.DialogResult.Cancel)
            {
                return;
            }

            FtpSiteDataGroup group     = null;
            TreeNode         groupNode = null;

            GetCurrentGroupNode(out group, out groupNode);

            //用户输入新建站点名称
            var tmpSiteName = InputForm.GetInput("新建站点", "站点名称", "");

            if (String.IsNullOrEmpty(tmpSiteName))
            {
                return;
            }
            //创建FtpSiteData对象
            var tmpSiteData = new FtpSiteData()
            {
                GUID  = Guid.NewGuid().ToString(),
                Name  = tmpSiteName,
                Port  = 21,
                Group = group
            };
            //在树形控件中创建节点
            var tmpNode = groupNode.Nodes.Add(tmpSiteName, tmpSiteName, "Site", "Site");

            tmpNode.Tag = tmpSiteData;
            //添加到组的站点列表中
            group.Sites.Add(tmpSiteData);
            //设置选中的节点为新建节点
            tvSites.SelectedNode = tmpNode;
        }