基于C#实现一个简单的FTP操作工具
作者:Csharp 时间:2023-05-12 11:50:58
实现功能
实现使用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
标签:C#,FTP,操作
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android UI设计与开发之仿人人网V5.9.2最新版引导界面
2022-10-10 17:34:16
![](https://img.aspxhome.com/file/2023/7/137617_0s.jpg)
java 完全二叉树的构建与四种遍历方法示例
2022-03-21 00:48:04
![](https://img.aspxhome.com/file/2023/1/81931_0s.jpg)
SpringBoot浅析Redis访问操作使用
2022-09-26 02:09:18
![](https://img.aspxhome.com/file/2023/4/80314_0s.png)
Java操作Redis2种方法代码详解
2022-09-10 22:58:56
Java多线程实现第三方数据同步
2023-06-30 10:57:57
emoji表情与unicode编码互转的实现(JS,JAVA,C#)
2023-02-07 06:07:48
C#采用HttpWebRequest实现保持会话上传文件到HTTP的方法
2023-07-18 17:20:29
C++ 线程(串行 并行 同步 异步)详解
2023-07-18 18:09:43
![](https://img.aspxhome.com/file/2023/4/124014_0s.png)
Java动态代理静态代理实例分析
2023-11-14 18:06:07
![](https://img.aspxhome.com/file/2023/8/103828_0s.png)
java实现dijkstra最短路径寻路算法
2021-10-23 06:29:58
Java Comparable及Comparator接口区别详解
2023-07-03 08:19:50
![](https://img.aspxhome.com/file/2023/5/57425_0s.png)
简述IDEA集成Git在实际项目中的运用
2022-06-30 20:43:05
![](https://img.aspxhome.com/file/2023/3/113253_0s.jpg)
Java编程中ArrayList源码分析
2023-05-20 00:05:25
Android中FoldingLayout折叠布局的用法及实战全攻略
2021-05-23 19:29:17
![](https://img.aspxhome.com/file/2023/9/137149_0s.jpg)
Mybatis 缓存原理及失效情况解析
2022-12-04 07:28:43
![](https://img.aspxhome.com/file/2023/6/82996_0s.jpg)
Android实现悬浮窗的简单方法实例
2023-06-17 18:11:02
Java 两种延时thread和timer详解及实例代码
2022-08-30 03:42:14
Java使用雪花id生成算法详解
2023-11-18 21:58:49
SpringBoot搭配AOP实现自定义注解
2022-04-07 01:21:59
C++中auto_ptr智能指针的用法详解
2023-05-21 02:14:05