基于C#实现一个简单的FTP操作工具
作者:Csharp 发布时间:2023-05-12 11:50:58
标签:C#,FTP,操作
实现功能
实现使用FTP上传、下载、重命名、刷新、删除功能
开发环境
开发工具: Visual Studio 2013
.NET Framework版本:4.5
实现代码
/*FTP操作公共类*/
private string FtpIp, FtpPort, FtpUser, FtpPwd, FtpUrl;
private FTPUtil()
{
}
public FTPUtil(string ftpIp, string ftpPort, string ftpUser, string ftpPwd)
{
FtpIp = ftpIp;
FtpPort = ftpPort;
FtpUser = ftpUser;
FtpPwd = ftpPwd;
FtpUrl = "ftp://" + ftpIp + ":" + ftpPort + "/";
}
private FtpWebRequest GetFtpWebRequest(string path, string method)
{
FtpWebRequest Ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(FtpUrl + "/" + path));
Ftp.Credentials = new NetworkCredential(FtpUser, FtpPwd);
Ftp.KeepAlive = false;
Ftp.UsePassive = true;
Ftp.Method = method;
return Ftp;
}
/// <summary>
/// 获取路径下所有文件夹
/// </summary>
/// <param name="dirName"></param>
/// <returns></returns>
public List<FileModel> GetDirs(string dirName)
{
return GetAllFiles(dirName).FindAll(s => s.Type == "文件夹");
}
/// <summary>
/// 获取路径下所有文件
/// </summary>
/// <param name="dirName"></param>
/// <returns></returns>
public List<FileModel> GetFiles(string dirName)
{
return GetAllFiles(dirName).FindAll(s => s.Type == "文件");
}
/// <summary>
/// 获取路径下所有项目
/// </summary>
/// <param name="dirName"></param>
/// <returns></returns>
public List<FileModel> GetAllFiles(string dirName)
{
List<FileModel> fileList = new List<FileModel>();
try
{
FtpWebRequest Ftp = GetFtpWebRequest(dirName, WebRequestMethods.Ftp.ListDirectoryDetails);
using (WebResponse response = Ftp.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
string line = "";
while ((line = reader.ReadLine()) != null)
{
fileList.Add(ConvertFile(line, dirName));
}
}
}
}
catch (Exception ex)
{
throw ex;
}
return fileList;
}
/// <summary>
/// FTP文件信息转换
/// </summary>
/// <param name="value"></param>
/// <param name="dirName"></param>
/// <returns></returns>
private FileModel ConvertFile(string value, string dirName)
{
string[] arr = value.Split(new string[] { " " },4, StringSplitOptions.RemoveEmptyEntries);
FileModel model = new FileModel();
model.Date = arr[0];
model.Time = arr[1];
if (arr[2] == "<DIR>")
{
model.Type = "文件夹";
model.Size = 0;
}
else
{
model.Type = "文件";
model.Size = Convert.ToInt64(arr[2]);
}
model.Name = arr[3];
model.FullName = dirName + "/" + model.Name;
return model;
}
/// <summary>
/// 上传
/// </summary>
/// <param name="fileName"></param>
/// <param name="desFile"></param>
public void Upload(string fileName, string desFile)
{
try
{
FileInfo fileInfo = new FileInfo(fileName);
FtpWebRequest Ftp = GetFtpWebRequest(desFile, WebRequestMethods.Ftp.UploadFile);
Ftp.UseBinary = true;
Ftp.ContentLength = fileInfo.Length;
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int len = 0;
using (FileStream fs = fileInfo.OpenRead())
{
using (Stream stream = Ftp.GetRequestStream())
{
while ((len = fs.Read(buff, 0, buffLength)) != 0)
{
stream.Write(buff, 0, buffLength);
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 下载
/// </summary>
/// <param name="fileName"></param>
/// <param name="desFile"></param>
public void DownLoad(string fileName, string desFile)
{
try
{
FtpWebRequest Ftp = GetFtpWebRequest(fileName, WebRequestMethods.Ftp.DownloadFile);
Ftp.UseBinary = true;
FtpWebResponse response = (FtpWebResponse)Ftp.GetResponse();
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int len = 0;
using (FileStream fs = new FileStream(desFile, FileMode.Create))
{
using (Stream stream = response.GetResponseStream())
{
while ((len = stream.Read(buff, 0, buffLength)) != 0)
{
fs.Write(buff, 0, buffLength);
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 删除文件
/// </summary>
/// <param name="fileName"></param>
public void DeleteFile(string fileName)
{
try
{
FtpWebRequest Ftp = GetFtpWebRequest(fileName, WebRequestMethods.Ftp.DeleteFile);
FtpWebResponse response = (FtpWebResponse)Ftp.GetResponse();
using (Stream datastream = response.GetResponseStream())
{
using (StreamReader sr = new StreamReader(datastream))
{
sr.ReadToEnd();
}
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 重命名
/// </summary>
/// <param name="fileName"></param>
/// <param name="newName"></param>
public void ReName(string fileName, string newName)
{
try
{
FtpWebRequest Ftp = GetFtpWebRequest(fileName, WebRequestMethods.Ftp.Rename);
Ftp.RenameTo = newName;
Ftp.UseBinary = true;
FtpWebResponse response = (FtpWebResponse)Ftp.GetResponse();
using (Stream datastream = response.GetResponseStream())
{
using (StreamReader sr = new StreamReader(datastream))
{
sr.ReadToEnd();
}
}
}
catch (Exception ex)
{
throw ex;
}
}
实现效果
FTP 操作工具视频演示
来源:https://blog.csdn.net/qq_27410185/article/details/124608445
0
投稿
猜你喜欢
- 前言插入排序狭义上指的是简单插入排序(选择集合,比较大小,插入元素),广义上还应该包括希尔排序(分治思想)及其两种实现方式,最激动人心的是
- 以下教程是小编在参与开发公司的一个crm系统,整理些相关资料,在该系统中有很多消息推送功能,在其中用到了websocket技术。下面小编整理
- 1、什么是servlet异步请求Servlet 3.0 之前,一个普通 Servlet 的主要工作流程大致如下:(1)、Servlet 接收
- 使用datatables自带后台查询 前台代码:<!DOCTYPE html><html><head>&
- 在阅读本文之前,大家可先参阅《简单理解Spring之IOC和AOP及代码示例》一文,了解下Spring中IOC和AOP的相关内容。下面进入正
- SQL 映射XML 文件是所有sql语句放置的地方。需要定义一个workspace,一般定义为对应的接口类的路径。写好SQL语句映射文件后,
- 前言Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expe
- 所谓c#的委托就是说把函数当参数来传递。这个在js完全就用不着搞什么委托东西,直接转就是了。而对于C#来说则不是这样!一个函数,如果它的参数
- Volatile关键字的作用主要有如下两个:1.线程的可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。2. 顺序一致性
- 本文提供了基于MD5加密16位和32位的方法,具体内容如下import java.io.IOException;import java.ma
- 我就废话不多说了,大家还是直接看代码吧~/** * 从list中随机抽取元素 * * @param
- 一、首先编写一个工具类Hello:public class Hello { public static void say(Str
- 网络基础知识1、OSI分层模型和TCP/IP分层模型的对应关系这里对于7层模型不展开来讲,只选择跟这次系列主题相关的知识点介绍。2、七层模型
- 前言在开发过程中需要快速新建getXXX();setXXX()方法的时候,就会想能否批量实现呢?例如实现如下代码,一次性操作,不是一个一个码
- Java类加载器1、BootClassLoader: 用于加载Android Framework层class文件。2、PathClassLo
- 本文实例分析了C#中结构(struct)的部分初始化和完全初始化,分享给大家供大家参考。具体分析如下:假设有这样一个值类型struct,如下
- Java for循环打印菱形Java代码输出菱形的方法和思路有很多,在此分享一个稍带模块化拆分思想的解决方案,将需要输出的菱形拆分成8个模块
- 运算符运算符,顾名思义就是用来执行数学运算的。在Java中运算符可以分为:算术运算符、关系运算符、逻辑运算符、位运算符、移位运算符、条件运算
- 1. 判断允许上传文件的 文件后缀/图片后缀/相片后缀 和 其它工具类import org.springframework.stereoty
- 一、spring定时任务执行两次问题重现和解析最近使用quartz定时任务框架,结果发现开发环境执行无任何问题,部署到服务器上后,发现同一时