public void ListFinish(IAsyncResult ar) { FtpWebResponse response = null; try { ListFileAsyncState stateObj = ar.AsyncState as ListFileAsyncState; FtpWebRequest request = stateObj.Request; _currentPath = stateObj.Path; response = (FtpWebResponse)request.EndGetResponse(ar); _result = response.StatusDescription; ServerFiles = ServerFileInfo.Parse(response.GetResponseStream()); } catch (Exception e) { if (response != null) { _result = response.StatusDescription; } else { _result = e.Message; } } finally { if (response != null) { response.Close(); } _listFileRequestFinished = true; } }
private void UploadNextFile(IAsyncResult ar) { //清空 _currLength = 0; _abort = false; if (_uploadResponse != null) { _uploadResponse.Close(); } if (_fileStream != null) { _fileStream.Close(); } if (_requestStream != null) { _requestStream.Close(); } _uploadResponse = (FtpWebResponse)_uploadRequest.EndGetResponse(ar); //_result = "文件上传成功"; try { if (_uploadFiles.Count != 0) { FileInfo file = _uploadFiles[0] as FileInfo; ServerFileInfo serverFile = SearchFile(file.Name.Replace('#', '_')); if (serverFile != null) { _currLength = serverFile.Size; } else { _currLength = 0; } string uploadUrl = @"ftp://" + this.Address + ":" + this.Port + "/" + file.Name.Replace('#', '_'); _uploadRequest = (FtpWebRequest)WebRequest.Create(uploadUrl); if ((bool)_uploadFilesStateTable[file]) {//覆盖 _uploadRequest.Method = WebRequestMethods.Ftp.UploadFile; _currLength = 0; } else { _uploadRequest.Method = _currLength == 0 ? WebRequestMethods.Ftp.UploadFile : WebRequestMethods.Ftp.AppendFile; } _uploadRequest.Credentials = new NetworkCredential(this.UserName, this.Password); _uploadRequest.Proxy = null; _uploadRequest.KeepAlive = false; _uploadRequest.BeginGetRequestStream(new AsyncCallback(TransFile), file); } } catch (Exception e) { _result = e.Message; } }
public double GetFileProcess(FileInfo uploadFile) { ServerFileInfo serverFile = SearchFile(uploadFile.Name); if (serverFile != null) { return((double)serverFile.Size / (double)uploadFile.Length); } else { return(0); } }
/// <summary> /// 删除目录 /// </summary> /// <param name="dirName">目录名(含路径)</param> /// <returns></returns> public bool RemoveDir(string url) { try { _deleteFileFinished = false; FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url); request.Credentials = new NetworkCredential(this.UserName, this.Password); request.Method = WebRequestMethods.Ftp.ListDirectoryDetails; FtpWebResponse response = request.GetResponse() as FtpWebResponse; IList fileList = ServerFileInfo.Parse(response.GetResponseStream()); foreach (ServerFileInfo file in fileList) { if (file.Name.Equals(".") || file.Name.Equals("..")) { continue; } if (file.Directory) { RemoveDir(url + file.Name + "/"); } else { if (file.Name.IndexOf('#') != -1) { throw new Exception(); } FtpWebRequest delete = (FtpWebRequest)WebRequest.Create(url + file.Name); delete.Credentials = new NetworkCredential(this.UserName, this.Password); delete.Method = WebRequestMethods.Ftp.DeleteFile; Console.WriteLine(((FtpWebResponse)delete.GetResponse()).StatusDescription); } } request = (FtpWebRequest)WebRequest.Create(url.Substring(0, url.Length - 1)); request.Credentials = new NetworkCredential(this.UserName, this.Password); request.Method = WebRequestMethods.Ftp.RemoveDirectory; request.KeepAlive = false; response = request.GetResponse() as FtpWebResponse; this.Result = response.StatusDescription; response.Close(); } catch (Exception e) { this.Result = e.Message; return(false); } finally { _deleteFileFinished = true; } return(true); }
public bool UploadFile(IList files) { try { //区分第一次 if (files != null) { _uploadFiles = files; } _abort = false; if (_uploadFiles.Count != 0) { FileInfo file = _uploadFiles[0] as FileInfo; //把'#'替换为'_' ServerFileInfo serverFile = SearchFile(file.Name.Replace('#', '_')); if (serverFile != null) { _currLength = serverFile.Size; } else { _currLength = 0; } string uploadUrl = FTP_URL_PREFIX + file.Name.Replace('#', '_'); _uploadRequest = (FtpWebRequest)WebRequest.Create(uploadUrl); if ((bool)_uploadFilesStateTable[file]) {//覆盖 _uploadRequest.Method = WebRequestMethods.Ftp.UploadFile; _currLength = 0; } else { _uploadRequest.Method = _currLength == 0 ? WebRequestMethods.Ftp.UploadFile : WebRequestMethods.Ftp.AppendFile; } _uploadRequest.Credentials = new NetworkCredential(this.UserName, this.Password); _uploadRequest.Proxy = null; _uploadRequest.KeepAlive = false; _uploadRequest.BeginGetRequestStream(new AsyncCallback(TransFile), file); } return(true); } catch (Exception e) { _result = e.Message; return(false); } }