一、引用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 编辑过