c#打开ftp服务器上的文件,【C#】FtpHelper对服务器文件实现读写操作的实例详解...

这篇文章主要为大家详细介绍了FtpHelper实现ftp服务器文件读写操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net;

using System.IO;

using System.Threading;

using System.Configuration;

namespace FtpSyn

{

public class FtpHelper

{

//基本设置 ftp://400:ZOina2017@192.168.10.17/400backup

static private string path = @"ftp://" + ConfigurationManager.AppSettings["FtpServerIP"].ToString() + "/"; //目标路径

static private string ftpip = ConfigurationManager.AppSettings["FtpServerIP"].ToString(); //ftp IP地址

static private string username = ConfigurationManager.AppSettings["FtpUserName"].ToString(); //ftp用户名

static private string password = ConfigurationManager.AppSettings["FtpPassWord"].ToString(); //ftp密码

//获取ftp上面的文件和文件夹

public static string[] GetFileList(string dir)

{

string[] downloadFiles;

StringBuilder result = new StringBuilder();

FtpWebRequest request;

try

{

request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + dir));

request.UseBinary = true;

request.Credentials = new NetworkCredential(username, password);//设置用户名和密码

request.Method = WebRequestMethods.Ftp.ListDirectory;

request.UseBinary = true;

request.UsePassive = false; //选择主动还是被动模式 , 这句要加上的。

request.KeepAlive = false;//一定要设置此属性,否则一次性下载多个文件的时候,会出现异常。

WebResponse response = request.GetResponse();

StreamReader reader = new StreamReader(response.GetResponseStream());

string line = reader.ReadLine();

while (line != null)

{

result.Append(line);

result.Append("\n");

line = reader.ReadLine();

}

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

reader.Close();

response.Close();

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

}

catch (Exception ex)

{

LogHelper.writeErrorLog("获取ftp上面的文件和文件夹:" + ex.Message);

downloadFiles = null;

return downloadFiles;

}

}

///

/// 从ftp服务器上获取文件并将内容全部转换成string返回

///

///

///

///

public static string GetFileStr(string fileName, string dir)

{

FtpWebRequest reqFTP;

try

{

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + dir + "/" + fileName));

reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;

reqFTP.UseBinary = true;

reqFTP.Credentials = new NetworkCredential(username, password);

reqFTP.UsePassive = false; //选择主动还是被动模式 , 这句要加上的。

reqFTP.KeepAlive = false;//一定要设置此属性,否则一次性下载多个文件的时候,会出现异常。

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

Stream ftpStream = response.GetResponseStream();

StreamReader reader = new StreamReader(ftpStream);

string fileStr = reader.ReadToEnd();

reader.Close();

ftpStream.Close();

response.Close();

return fileStr;

}

catch (Exception ex)

{

LogHelper.writeErrorLog("获取ftp文件并读取内容失败:" + ex.Message);

return null;

}

}

///

/// 获取文件大小

///

/// ip服务器下的相对路径

/// 文件大小

public static int GetFileSize(string file)

{

StringBuilder result = new StringBuilder();

FtpWebRequest request;

try

{

request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path + file));

request.UseBinary = true;

request.Credentials = new NetworkCredential(username, password);//设置用户名和密码

request.Method = WebRequestMethods.Ftp.GetFileSize;

int dataLength = (int)request.GetResponse().ContentLength;

return dataLength;

}

catch (Exception ex)

{

Console.WriteLine("获取文件大小出错:" + ex.Message);

return -1;

}

}

///

/// 文件上传

///

/// 原路径(绝对路径)包括文件名

/// 目标文件夹:服务器下的相对路径 不填为根目录

public static void FileUpLoad(string filePath,string objPath="")

{

try

{

string url = path;

if(objPath!="")

url += objPath + "/";

try

{

FtpWebRequest reqFTP = null;

//待上传的文件 (全路径)

try

{

FileInfo fileInfo = new FileInfo(filePath);

using (FileStream fs = fileInfo.OpenRead())

{

long length = fs.Length;

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url + fileInfo.Name));

//设置连接到FTP的帐号密码

reqFTP.Credentials = new NetworkCredential(username, password);

//设置请求完成后是否保持连接

reqFTP.KeepAlive = false;

//指定执行命令

reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

//指定数据传输类型

reqFTP.UseBinary = true;

using (Stream stream = reqFTP.GetRequestStream())

{

//设置缓冲大小

int BufferLength = 5120;

byte[] b = new byte[BufferLength];

int i;

while ((i = fs.Read(b, 0, BufferLength)) > 0)

{

stream.Write(b, 0, i);

}

Console.WriteLine("上传文件成功");

}

}

}

catch (Exception ex)

{

Console.WriteLine("上传文件失败错误为" + ex.Message);

}

finally

{

}

}

catch (Exception ex)

{

Console.WriteLine("上传文件失败错误为" + ex.Message);

}

finally

{

}

}

catch (Exception ex)

{

Console.WriteLine("上传文件失败错误为" + ex.Message);

}

}

///

/// 删除文件

///

/// 服务器下的相对路径 包括文件名

public static void DeleteFileName(string fileName)

{

try

{

FileInfo fileInf = new FileInfo(ftpip +""+ fileName);

string uri = path + fileName;

FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

// 指定数据传输类型

reqFTP.UseBinary = true;

// ftp用户名和密码

reqFTP.Credentials = new NetworkCredential(username, password);

// 默认为true,连接不会被关闭

// 在一个命令之后被执行

reqFTP.KeepAlive = false;

// 指定执行什么命令

reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;

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

response.Close();

}

catch (Exception ex)

{

Console.WriteLine("删除文件出错:" + ex.Message);

}

}

///

/// 新建目录 上一级必须先存在

///

/// 服务器下的相对路径

public static void MakeDir(string dirName)

{

try

{

string uri = path + dirName;

FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

// 指定数据传输类型

reqFTP.UseBinary = true;

// ftp用户名和密码

reqFTP.Credentials = new NetworkCredential(username, password);

reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;

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

response.Close();

}

catch (Exception ex)

{

Console.WriteLine("创建目录出错:" + ex.Message);

}

}

///

/// 删除目录 上一级必须先存在

///

/// 服务器下的相对路径

public static void DelDir(string dirName)

{

try

{

string uri = path + dirName;

FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

// ftp用户名和密码

reqFTP.Credentials = new NetworkCredential(username, password);

reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;

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

response.Close();

}

catch (Exception ex)

{

Console.WriteLine("删除目录出错:" + ex.Message);

}

}

///

/// 从ftp服务器上获得文件夹列表

///

/// 服务器下的相对路径

///

public static List GetDirctory(string RequedstPath)

{

List strs = new List();

try

{

string uri = path + RequedstPath; //目标路径 path为服务器地址

FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

// ftp用户名和密码

reqFTP.Credentials = new NetworkCredential(username, password);

reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

WebResponse response = reqFTP.GetResponse();

StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名

string line = reader.ReadLine();

while (line != null)

{

if (line.Contains("

{

string msg = line.Substring(line.LastIndexOf("

strs.Add(msg);

}

line = reader.ReadLine();

}

reader.Close();

response.Close();

return strs;

}

catch (Exception ex)

{

Console.WriteLine("获取目录出错:" + ex.Message);

}

return strs;

}

///

/// 从ftp服务器上获得文件列表

///

/// 服务器下的相对路径

///

public static List GetFile(string RequedstPath)

{

List strs = new List();

try

{

string uri = path + RequedstPath; //目标路径 path为服务器地址

FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

// ftp用户名和密码

reqFTP.Credentials = new NetworkCredential(username, password);

reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

WebResponse response = reqFTP.GetResponse();

StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名

string line = reader.ReadLine();

while (line != null)

{

if (!line.Contains("

{

string msg = line.Substring(39).Trim();

strs.Add(msg);

}

line = reader.ReadLine();

}

reader.Close();

response.Close();

return strs;

}

catch (Exception ex)

{

Console.WriteLine("获取文件出错:" + ex.Message);

}

return strs;

}

}

}