您的位置:首页 > 编程语言 > PHP开发

ftp操作类,ftp上传,下载,创建目录,检查文件存在,删除文件

2014-03-18 17:38 579 查看
using System;

using System.IO;

using System.Net;

using System.Text;

using System.Diagnostics;

using System.Text.RegularExpressions;

using System.Web;

namespace IS.Common

{

/// <summary>

/// ftp操作类,ftp上传,下载,创建目录,检查文件存在,删除文件

/// </summary>

public class Ftp

{

/// <summary>

/// 从ftp上下载文件

/// </summary>

/// <param name="filePath">下载到本地的文件路径</param>

/// <param name="FileSrc">ftp源文件夹</param>

/// <param name="fileName">下载后的文件名</param>

/// <param name="ftpServerIP"></param>

/// <param name="ftpUserName"></param>

/// <param name="ftpPwd"></param>

public static void Download(string filePath, string FileSrc, string fileName, string ftpServerIP, string ftpUserName, string ftpPwd)

{

if (!Directory.Exists(filePath))

{

Directory.CreateDirectory(filePath);

}

using (FileStream OutputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create))

{

FtpWebRequest ReqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + FileSrc));

ReqFTP.Method = WebRequestMethods.Ftp.DownloadFile;

ReqFTP.UseBinary = true;

ReqFTP.Credentials = new NetworkCredential(ftpUserName, ftpPwd);

using (FtpWebResponse response = (FtpWebResponse)ReqFTP.GetResponse())

{

using (Stream FtpStream = response.GetResponseStream())

{

long Cl = response.ContentLength;

int bufferSize = 2048;

int readCount;

byte[] buffer = new byte[bufferSize];

readCount = FtpStream.Read(buffer, 0, bufferSize);

while (readCount > 0)

{

OutputStream.Write(buffer, 0, readCount);

readCount = FtpStream.Read(buffer, 0, bufferSize);

}

FtpStream.Close();

}

response.Close();

}

OutputStream.Close();

}

}

/// <summary>

/// 从服务器上传文件到FTP上

/// </summary>

/// <param name="sFileDstPath">源文件夹名称</param>

/// <param name="FolderName">ftp服务器的目标文件夹</param>

/// <param name="ftpServerIP">ftp ip</param>

/// <param name="ftpUserName">用户名</param>

/// <param name="ftpPwd">密码</param>

public static void UploadSmall(string sFileDstPath, string FolderName, string ftpServerIP, string ftpUserName, string ftpPwd)

{

FileInfo fileInf = new FileInfo(sFileDstPath);

FtpWebRequest reqFTP;

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + FolderName + "/" + fileInf.Name));

reqFTP.Credentials = new NetworkCredential(ftpUserName, ftpPwd);

reqFTP.KeepAlive = false;

reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

reqFTP.UseBinary = true;

reqFTP.ContentLength = fileInf.Length;

int buffLength = 2048;

byte[] buff = new byte[buffLength];

int contentLen;

using (FileStream fs = fileInf.OpenRead())

{

using (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();

}

}



/// <summary>

/// 删除FTP上的文件

/// </summary>

/// <param name="IName">要删除的文件数组</param>

/// <param name="FolderName">要删除文件所在的ftp文件夹</param>

/// <param name="ftpServerIP"></param>

/// <param name="ftpUserName"></param>

/// <param name="ftpPwd"></param>

public static void DeleteFtpFile(string[] IName, string FolderName, string ftpServerIP, string ftpUserName, string ftpPwd)

{

foreach (string ImageName in IName)

{

string[] FileList = GetFileList(FolderName, ftpServerIP, ftpUserName, ftpPwd);

for (int i = 0; i < FileList.Length; i++)

{

string Name = FileList[i].ToString();

if (Name == ImageName)

{

FtpWebRequest ReqFTP;

ReqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + FolderName + "/" + ImageName));

ReqFTP.Credentials = new NetworkCredential(ftpUserName, ftpPwd);

ReqFTP.KeepAlive = false;

ReqFTP.Method = WebRequestMethods.Ftp.DeleteFile;

ReqFTP.UseBinary = true;

using (FtpWebResponse Response = (FtpWebResponse)ReqFTP.GetResponse())

{

long size = Response.ContentLength;

using (Stream datastream = Response.GetResponseStream())

{

using (StreamReader sr = new StreamReader(datastream))

{

sr.ReadToEnd();

sr.Close();

}

datastream.Close();

}

Response.Close();

}

}

}

}

}

/// <summary>

/// 检查文件是否存在

/// </summary>

/// <param name="FolderName">ftp文件夹</param>

/// <param name="ftpServerIP"></param>

/// <param name="ftpUserName"></param>

/// <param name="ftpPwd"></param>

/// <returns></returns>

public static string[] GetFileList(string FolderName, string ftpServerIP, string ftpUserName, string ftpPwd)

{

string[] downloadFiles;

StringBuilder result = new StringBuilder();

FtpWebRequest reqFTP;

try

{

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + FolderName + "/"));

reqFTP.UseBinary = true;

reqFTP.Credentials = new NetworkCredential(ftpUserName, ftpPwd);

reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;

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

}

// to remove the trailing '\n'

result.Remove(result.ToString().LastIndexOf('\n'), 1);

reader.Close();

response.Close();

return result.ToString().Split('\n');

}

catch (Exception ex)

{

downloadFiles = null;

return downloadFiles;

}

}



/// <summary>

/// 从客户端上传文件到FTP上

/// </summary>

/// <param name="sFilePath">客户端文件上传类</param>

/// <param name="filename">ftp文件名</param>

/// <param name="FolderName">ftp文件夹</param>

/// <param name="ftpServerIP"></param>

/// <param name="ftpUserName"></param>

/// <param name="ftpPwd"></param>

public static void UploadFtp(HttpPostedFile sFilePath, string filename, string FolderName, string ftpServerIP, string ftpUserName, string ftpPwd)

{

//获取的服务器路径

//FileInfo fileInf = new FileInfo(sFilePath);

FtpWebRequest reqFTP;

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + FolderName + "/" + filename));

reqFTP.Credentials = new NetworkCredential(ftpUserName, ftpPwd);

reqFTP.KeepAlive = false;

reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

reqFTP.UseBinary = true;

reqFTP.ContentLength = sFilePath.ContentLength;

//设置缓存

int buffLength = 2048;

byte[] buff = new byte[buffLength];

int contentLen;

using (Stream fs = sFilePath.InputStream)

{

using (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();

}

}



/// <summary>

/// 创建目录

/// </summary>

/// <param name="FolderName">ftp目录</param>

/// <param name="ftpServerIP"></param>

/// <param name="ftpUserName"></param>

/// <param name="ftpPwd"></param>

public static void CreateDirectory(string FolderName, string ftpServerIP, string ftpUserName, string ftpPwd)

{

//创建日期目录

try

{

FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + FolderName));

reqFTP.UseBinary = true;

reqFTP.Credentials = new NetworkCredential(ftpUserName, ftpPwd);

reqFTP.KeepAlive = false;

reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;

FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

}

catch

{



}

}

private static Regex regexName = new Regex(@"[^\s]*$", RegexOptions.Compiled);

/// <summary>

/// 检查日期目录和文件是否存在

/// </summary>

/// <param name="FolderName">文件(夹)名</param>

/// <param name="ftpServerIP"></param>

/// <param name="ftpUserName"></param>

/// <param name="ftpPwd"></param>

/// <returns></returns>

public static bool CheckFileOrPath(string FolderName, string ftpServerIP, string ftpUserName, string ftpPwd)

{

//检查一下日期目录是否存在

FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/"));

reqFTP.UseBinary = true;

reqFTP.Credentials = new NetworkCredential(ftpUserName, ftpPwd);

reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

Stream stream = reqFTP.GetResponse().GetResponseStream();

using (StreamReader sr = new StreamReader(stream))

{

string line = sr.ReadLine();

while (!string.IsNullOrEmpty(line))

{

GroupCollection gc = regexName.Match(line).Groups;

if (gc.Count != 1)

{

throw new ApplicationException("FTP 返回的字串格式不正确");

}

string path = gc[0].Value;

if (path == FolderName)

{

return true;

}

line = sr.ReadLine();

}

}

return false;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐