一、引用DLL
using System.IO;using System.Net;
二、创建FTP连接
/// <summary> /// 连接FTP服务器/// </summary> /// <param name="FtpServerIP">FTP连接地址</param> /// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定默认根目录</param> /// <param name="FtpUserID">用户名</param> /// <param name="FtpPassword">密码</param> public FTPHelper(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword){ System.Net.ServicePointManager.DefaultConnectionLimit = 200;
FtpServerIP = FtpServerIP.Replace("ftp://", "");
string[] arr = FtpServerIP.Split('/'); if (arr.Length > 1) { FtpServerIP = arr[0]; for (int i = 1; i < arr.Length; i++) { FtpRemotePath += "/" + arr[i]; } if (FtpRemotePath.Substring(FtpRemotePath.Length - 1) == "/") { FtpRemotePath = FtpRemotePath.Substring(0, FtpRemotePath.Length - 1); } }
ftpServerIP = FtpServerIP; ftpRemotePath = FtpRemotePath; ftpUserID = FtpUserID; ftpPassword = FtpPassword; if (string.IsNullOrEmpty(ftpRemotePath)) { ftpURI = "ftp://" + ftpServerIP + "/"; } else { ftpURI = "ftp://" + ftpServerIP + ftpRemotePath + "/"; } FtpCheckDirectoryExist(ftpRemotePath + "/");}
三、上传、下载
/// <summary> /// 上传 /// </summary> public void Upload(string filename){ FileInfo fileInf = new FileInfo(filename); FtpWebRequest reqFTP; reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileInf.Name)); reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); reqFTP.Method = WebRequestMethods.Ftp.UploadFile; reqFTP.UsePassive = false; reqFTP.KeepAlive = true; reqFTP.UseBinary = true; reqFTP.ContentLength = fileInf.Length; int buffLength = 2048; byte[] buff = new byte[buffLength]; int contentLen; FileStream fs = fileInf.OpenRead(); try { Stream strm = reqFTP.GetRequestStream(); contentLen = fs.Read(buff, 0, buffLength); while (contentLen != 0) { strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); } strm.Close(); fs.Close(); } catch (Exception ex) { throw new Exception(ex.Message); }}
/// <summary> /// 下载 /// </summary> public void Download(string filePath, string fileName){ try { FileInfo fileInf = new FileInfo(fileName);
FtpWebRequest reqFTP; reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileInf.Name)); reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; reqFTP.UseBinary = true; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength; int bufferSize = 2048; int readCount; byte[] buffer = new byte[bufferSize]; readCount = ftpStream.Read(buffer, 0, bufferSize);
FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create); while (readCount > 0) { outputStream.Write(buffer, 0, readCount); readCount = ftpStream.Read(buffer, 0, bufferSize); } ftpStream.Close(); outputStream.Close(); response.Close(); } catch (Exception ex) { throw new Exception(ex.Message); }}
四、创建目录
/// <summary>/// 判断文件的目录是否存,不存则创建 /// </summary>/// <param name="destFilePath"></param>public void FtpCheckDirectoryExist(string destFilePath){ try { string fullDir = FtpParseDirectory(destFilePath); string[] dirs = fullDir.Split('/'); string curDir = "/"; for (int i = 0; i < dirs.Length; i++) { string dir = dirs[i]; //如果是以/开始的路径,第一个为空 if (dir != null && dir.Length > 0) { try { curDir += dir + "/"; Uri uri = new Uri("ftp://" + ftpServerIP + curDir);
if (!DirectoryIsExist(uri, ftpUserID, ftpPassword)) { FtpMakeDir(curDir); } } catch (Exception e) { throw new Exception(e.Message); } } } } catch (Exception ex) { throw new Exception("FtpCheckDirectoryExist异常" + ex.Message); }
}
/// <summary>/// 截图字符/// </summary>/// <param name="destFilePath"></param>/// <returns></returns>public string FtpParseDirectory(string destFilePath){ return destFilePath.Substring(0, destFilePath.LastIndexOf("/"));}
/// <summary>/// 创建目录/// </summary>/// <param name="localFile"></param>/// <returns></returns> public Boolean FtpMakeDir(string localFile){ FtpWebRequest req = (FtpWebRequest)WebRequest.Create("ftp://" + ftpServerIP + localFile); req.Credentials = new NetworkCredential(ftpUserID, ftpPassword); req.Method = WebRequestMethods.Ftp.MakeDirectory; try { FtpWebResponse response = req.GetResponse() as FtpWebResponse; response.Close(); } catch (Exception) { req.Abort(); return false; } req.Abort(); return true;}
//文件是否存在public bool DirectoryIsExist(Uri pFtpServerIP, string pFtpUserID, string pFtpPW){ string[] value = GetFileList(pFtpServerIP, pFtpUserID, pFtpPW); if (value == null) { return false; } else { return true; }}
//获取文件集public string[] GetFileList(Uri pFtpServerIP, string pFtpUserID, string pFtpPW){ StringBuilder result = new StringBuilder(); try { FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(pFtpServerIP); reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(pFtpUserID, pFtpPW); reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
WebResponse response = reqFTP.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); string line = reader.ReadLine(); while (line != null) { result.Append(line); result.Append("\n"); line = reader.ReadLine(); } reader.Close(); response.Close(); return result.ToString().Split('\n'); } catch(Exception e) { return null; }}
五、删除文件
/// 删除文件 /// </summary> public void Delete(string fileName){ try { FtpWebRequest reqFTP; reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName)); reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); reqFTP.Method = WebRequestMethods.Ftp.DeleteFile; reqFTP.KeepAlive = false; string result = String.Empty; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); long size = response.ContentLength; Stream datastream = response.GetResponseStream(); StreamReader sr = new StreamReader(datastream); result = sr.ReadToEnd(); sr.Close(); datastream.Close(); response.Close(); } catch (Exception ex) { throw new Exception(ex.Message); }}
该文章在 2024/12/26 9:18:10 编辑过