C#如何操控FTP
来源:互联网 发布:手机电子相册制作软件 编辑:程序博客网 时间:2024/05/21 06:48
C#如何操控FTP关于FTP的应用免不了要对FTP进行增删查改什么的。通过搜索,整理和修改,自己写了一个FTP的Helper类。此篇文章目的有二(2最近流行)。
- 累积代码,方便自己以后查阅使用;
- 分享代码,方便他人使用。
以下是类:
FtpHelper.cs
以下是重点说明:
如何获取某一目录下的文件和文件夹列表。
由于FtpWebRequest类只提供了WebRequestMethods.Ftp.ListDirectory方式和WebRequestMethods.Ftp.ListDirectoryDetails方式。这个方法获取到的是包含文件列表和文件夹列表的信息。并不是单单只包含某一类。为此我们需要分析获取信息的特点。分析发现,对于文件夹会有“<DIR>”这一项,而文件没有。所以我们可以根据这个来区分。一下分别是获取文件列表和文件夹列表的代码:
获取文件夹:
/// <summary>/// 从ftp服务器上获得文件夹列表/// </summary>/// <param name="RequedstPath">服务器下的相对路径</param>/// <returns></returns>public static List<string> GetDirctory(string RequedstPath){ List<string> strs = new List<string>(); 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("<DIR>")) { string msg = line.Substring(line.LastIndexOf("<DIR>")+5).Trim(); strs.Add(msg); } line = reader.ReadLine(); } reader.Close(); response.Close(); return strs; } catch (Exception ex) { Console.WriteLine("获取目录出错:" + ex.Message); } return strs;}
获取文件列表
/// <summary>/// 从ftp服务器上获得文件列表/// </summary>/// <param name="RequedstPath">服务器下的相对路径</param>/// <returns></returns>public static List<string> GetFile(string RequedstPath){ List<string> strs = new List<string>(); 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("<DIR>")) { 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;}
其他代码并不需要过多的说明,注释已经说的相当明确了。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.IO;using System.Threading;namespace FtpSyn{ static public class FtpHelper { //基本设置 static private string path = @"ftp://" + Helper.GetAppConfig("obj") + "/"; //目标路径 static private string ftpip =Helper.GetAppConfig("obj"); //ftp IP地址 static private string username = Helper.GetAppConfig("username"); //ftp用户名 static private string password = Helper.GetAppConfig("password"); //ftp密码 //获取ftp上面的文件和文件夹 public static string[] GetFileList(string dir) { string[] downloadFiles; StringBuilder result = new StringBuilder(); FtpWebRequest request; try { request = (FtpWebRequest)FtpWebRequest.Create(new Uri(path)); request.UseBinary = true; request.Credentials = new NetworkCredential(username, password);//设置用户名和密码 request.Method = WebRequestMethods.Ftp.ListDirectory; request.UseBinary = true; WebResponse response = request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); string line = reader.ReadLine(); while (line != null) { result.Append(line); result.Append("\n"); Console.WriteLine(line); 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) { Console.WriteLine("获取ftp上面的文件和文件夹:" + ex.Message); downloadFiles = null; return downloadFiles; } } /// <summary> /// 获取文件大小 /// </summary> /// <param name="file">ip服务器下的相对路径</param> /// <returns>文件大小</returns> 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; } } /// <summary> /// 文件上传 /// </summary> /// <param name="filePath">原路径(绝对路径)包括文件名</param> /// <param name="objPath">目标文件夹:服务器下的相对路径 不填为根目录</param> 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); } } /// <summary> /// 删除文件 /// </summary> /// <param name="fileName">服务器下的相对路径 包括文件名</param> 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); } } /// <summary> /// 新建目录 上一级必须先存在 /// </summary> /// <param name="dirName">服务器下的相对路径</param> 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); } } /// <summary> /// 删除目录 上一级必须先存在 /// </summary> /// <param name="dirName">服务器下的相对路径</param> 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); } } /// <summary> /// 从ftp服务器上获得文件夹列表 /// </summary> /// <param name="RequedstPath">服务器下的相对路径</param> /// <returns></returns> public static List<string> GetDirctory(string RequedstPath) { List<string> strs = new List<string>(); 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("<DIR>")) { string msg = line.Substring(line.LastIndexOf("<DIR>")+5).Trim(); strs.Add(msg); } line = reader.ReadLine(); } reader.Close(); response.Close(); return strs; } catch (Exception ex) { Console.WriteLine("获取目录出错:" + ex.Message); } return strs; } /// <summary> /// 从ftp服务器上获得文件列表 /// </summary> /// <param name="RequedstPath">服务器下的相对路径</param> /// <returns></returns> public static List<string> GetFile(string RequedstPath) { List<string> strs = new List<string>(); 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("<DIR>")) { 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; } }}
希望对你有所帮助。
作者:Ron Ngai
出处:http://rondsny.github.io/rondsny/
关于作者:断码码农一枚。
欢迎转载,但未经作者同意须在文章页面明显位置给出原文连接
如有问题,可以通过rondsny#gmail.com 联系我,非常感谢。
分类: C#
好文要顶关注我 收藏该文联系我
2
0
(请您对文章做出评价)
«上一篇:本地文件同步——C#源代码
»下一篇:《C#编程风格》还记得多少
»下一篇:《C#编程风格》还记得多少
posted on 2012-07-30 09:21 Ron Ngai 阅读(8436) 评论(7)编辑 收藏
0 0
- C#如何操控FTP
- C#如何操控FTP
- C#如何操控FTP
- C#如何操控FTP
- C# 操控滚动条
- 如何操控意识
- C#操控 条形码扫描枪
- C#操控 条形码扫描枪
- C# 键盘操控鼠标指针
- C# 通过DirectInput 实现手柄操控
- c#操控 DataGridView 常用用法日志
- Unity3d C# 利用SQLDMO操控SQL Server
- c#窗口操作-句柄操控全解
- winform如何这样操控xml文件
- 如何远程操控另一台计算机
- C# FTP
- C# ftp
- 【转】c# 如何实现用ftp类上传目录文件
- Android练兵--基于OKHttp的升级改造
- HtmlParser与HtmlLexer类名重复编译失败的解决办法
- iOS 开发中,单款应用程序的最大可用内存是多少?
- linux系统命令strace
- sql 字符串替换
- C#如何操控FTP
- 第四章.使用DML语句更改数据.总结
- 递归函数 & 函数指针 ...
- C/C++内存泄漏及检测
- iText生成PDF报表文件
- scroll事件不触发?
- win10下为ionic搭载开发环境
- windows设置通过NFS连接到Linux共享数据
- 远程桌面设置
评论
#1楼2012-07-30 10:51 Eric.Hu
static private string path = @"ftp://" + Helper.GetAppConfig("obj") + "/"; //目标路径
static private string ftpip =Helper.GetAppConfig("obj"); //ftp IP地址
static private string username = Helper.GetAppConfig("username"); //ftp用户名
static private string password = Helper.GetAppConfig("password"); //ftp密码
#2楼2012-07-30 11:07 飞无痕落无声
其实就是个获取配置文件的方法啊。。微软自己带的有啊,别人可能只是封装了下。。
#3楼[楼主]2012-07-30 12:47 Ron Ngai
#4楼2012-07-30 14:56 一滴血
#5楼2012-07-30 16:03 reavics
#6楼[楼主]2012-07-30 16:43 Ron Ngai
Helper类只是我封装的一个很简单的类。没啥用处的。那些值你可以直接用真实的值替换掉的。我只是在helper类里面写了一个读取配置文件的方法而已。
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Configuration;
using
System.IO;
namespace
FtpSyn
{
public
static
class
Helper
{
/// <summary>
/// 获取自定义配置的值
/// </summary>
/// <param name="strKey">键值</param>
/// <returns>键值对应的值</returns>
public
static
string
GetAppConfig(
string
strKey)
{
foreach
(
string
key
in
ConfigurationManager.AppSettings)
{
if
(key == strKey)
{
return
ConfigurationManager.AppSettings[strKey];
}
}
return
null
;
}
}
}
转自:
http://www.cnblogs.com/rond/archive/2012/07/30/2611295.html