WPF下采用C#实现FTP上传下载获取文件列表

39 篇文章 1 订阅
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace ConvertData
{
 /// <summary>
 /// MainWindow.xaml 的交互逻辑
/// </summary>
 public partial class MainWindow : Window
 {
 string ftpServerIP = "192.168.20.249";
 string ftpUserID = "simed";
 string ftpPassword = "simed";

public MainWindow()
 {
 InitializeComponent();
 }

//获取文件列表
private void Button_Click_1(object sender, RoutedEventArgs e)
 {
 FtpUpDown ftpUpDown = new FtpUpDown(ftpServerIP, ftpUserID, ftpPassword);
 Paragraph pa = new Paragraph();
 Run r = new Run();
 string[] str = ftpUpDown.GetFileList("Test");
 foreach (string item in str)
 {
 r.Text = item;
 richTextBox1.AppendText(r.Text+"\n");
 }
 }
 //上传
private void Button_Click_2(object sender, RoutedEventArgs e)
 {
 FtpUpDown ftp = new FtpUpDown(ftpServerIP, ftpUserID, ftpPassword);
 string localpath = @"D:\image\5.txt";
 string ftppath = ftpServerIP+@"\Test";
 bool bol = ftp.Upload(localpath, ftppath);
 if (bol == true)
 MessageBox.Show("长传成功");
else
 MessageBox.Show("上传失败");
 }
 //下载
private void Button_Click_3(object sender, RoutedEventArgs e)
 {
 string errorinfo;
 string localpath = @"D:\image";
 string filename="3.txt";
 FtpUpDown ftp = new FtpUpDown(ftpServerIP, ftpUserID, ftpPassword);
 bool bol = ftp.Download(localpath, filename, out errorinfo);
 if (bol == true)
 MessageBox.Show("下载成功");
else
 MessageBox.Show("下载失败:" + errorinfo + "");
 }
 //退出
private void Button_Click_4(object sender, RoutedEventArgs e)
 {
 this.Close();
 }

private void Button_Click_5(object sender, RoutedEventArgs e)
 {
 richTextBox1.Document.Blocks.Clear();
 }
 }
}


FtpUpDown.cs:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;

namespace ConvertData
{
 public class FtpUpDown
 {
 string ftpServerIP;
 string ftpUserID;
 string ftpPassword;
 FtpWebRequest reqFTP;//FTP请求
private void Connect(String path)//连接ftp
 {
 // 根据uri创建FtpWebRequest对象
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
 // 指定数据传输类型
reqFTP.UseBinary = true;
 // ftp用户名和密码
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
 }
 public FtpUpDown(string ftpServerIP, string ftpUserID, string ftpPassword)
 {
 this.ftpServerIP = ftpServerIP;
 this.ftpUserID = ftpUserID;
 this.ftpPassword = ftpPassword;
 }

//三个重载函数从ftp服务器上获得文件列表
private string[] GetFileList(string path, string WRMethods)
 {
 string[] downloadFiles;
 StringBuilder result = new StringBuilder();
 try
 {
 Connect(path);
 reqFTP.Method = WRMethods;
 WebResponse response = reqFTP.GetResponse();
 StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);//中文文件名
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)
 {
 //Console.Write(ex.Message);
 MessageBox.Show(ex.Message);
 downloadFiles = null;
 return downloadFiles;
 }
 }
 public string[] GetFileList(string path)
 {
 return GetFileList("ftp://" + ftpServerIP + "/" + path, WebRequestMethods.Ftp.ListDirectory);
 }
 public string[] GetFileList()
 {
 return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectory);
 }
 //上传文件
public bool Upload(string localpath,string ftppath) 
 {
 bool bol = false;
 try
 {
 FileInfo fileInf = new FileInfo(localpath);
 ftppath = ftppath.Replace("\\", "/");
 string uri = "ftp://" + ftppath + "/" + fileInf.Name;
 Connect(uri);//连接 
// 默认为true,连接不会被关闭
// 在一个命令之后被执行
reqFTP.KeepAlive = false;
 // 指定执行什么命令
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
 // 上传文件时通知服务器文件的大小
reqFTP.ContentLength = fileInf.Length;
 // 缓冲大小设置为kb 
 int buffLength = 2048;
 byte[] buff = new byte[buffLength];
 int contentLen;
 // 打开一个文件流(System.IO.FileStream) 去读上传的文件
FileStream fs = fileInf.OpenRead();
 try
 {
 // 把上传的文件写入流
Stream strm = reqFTP.GetRequestStream();
 // 每次读文件流的kb
 contentLen = fs.Read(buff, 0, buffLength);
 // 流内容没有结束
while (contentLen != 0)
 {
 // 把内容从file stream 写入upload stream 
 strm.Write(buff, 0, contentLen);
 contentLen = fs.Read(buff, 0, buffLength);
 bol = true;
 }
 // 关闭两个流
strm.Close();
 fs.Close();
 }
 catch (Exception ex)
 {
 MessageBox.Show(ex.Message, "Upload Error");
 }
 }
 catch (Exception ex)
 {
 MessageBox.Show(ex.Message, "Upload Error");
 }
 return bol;
 }
 //下载文件
public bool Download(string localpath, string fileName, out string errorinfo)
 {
 try
 {
 String onlyFileName = Path.GetFileName(fileName);
 string newFileName = localpath + "\\" + onlyFileName;

if (File.Exists(newFileName))
 {
 errorinfo = string.Format("本地文件{0}已存在,无法下载", newFileName);
 return false;
 }
 string url = "ftp://" + ftpServerIP + "/Test/" + fileName;
 Connect(url);//连接 
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
 Stream ftpStream = response.GetResponseStream();
 long cl = response.ContentLength;
 int bufferSize = 2048;
 int readCount;
 byte[] buffer = new byte[bufferSize];
 readCount = ftpStream.Read(buffer, 0, bufferSize);

FileStream outputStream = new FileStream(newFileName, FileMode.Create);
 while (readCount > 0)
 {
 outputStream.Write(buffer, 0, readCount);
 readCount = ftpStream.Read(buffer, 0, bufferSize);
 }
 ftpStream.Close();
 outputStream.Close();
 response.Close();
 errorinfo = "";
 return true;
 }
 catch (Exception ex)
 {
 errorinfo = string.Format("因{0},无法下载", ex.Message);
 return false;
 }
 }
 //删除文件
public void DeleteFileName(string fileName)
 {
 try
 {
 FileInfo fileInf = new FileInfo(fileName);
 string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
 Connect(uri);//连接 
// 默认为true,连接不会被关闭
// 在一个命令之后被执行
reqFTP.KeepAlive = false;
 // 指定执行什么命令
reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
 response.Close();
 }
 catch (Exception ex)
 {
 //Console.Write(ex.Message, "删除错误");
MessageBox.Show(ex.Message, "删除错误");
 }
 }
 //创建目录

public void MakeDir(string dirName)
 {
 try
 {
 string uri = "ftp://" + ftpServerIP + "/" + dirName;
 Connect(uri);//连接 
reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
 response.Close();
 }
 catch (Exception ex)
 {
 //Console.Write(ex.Message);
 MessageBox.Show(ex.Message);
 }
 }
 //删除目录
public void delDir(string dirName)
 {
 try
 {
 string uri = "ftp://" + ftpServerIP + "/" + dirName;
 Connect(uri);//连接 
reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;
 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
 response.Close();
 }
 catch (Exception ex)
 {
 //MessageBox.Show()
 //Console.Write(ex.Message);
 MessageBox.Show(ex.Message);
 }
 }
 //获得文件大小
public long GetFileSize(string filename)
 {
 long fileSize = 0;
 try
 {
 FileInfo fileInf = new FileInfo(filename);
 string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
 Connect(uri);//连接 
reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
 fileSize = response.ContentLength;
 response.Close();
 }
 catch (Exception ex)
 {
 //Console.Write(ex.Message);
 MessageBox.Show(ex.Message);
 }
 return fileSize;
 }
 //文件改名
public void Rename(string currentFilename, string newFilename)
 {
 try
 {
 FileInfo fileInf = new FileInfo(currentFilename);
 string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
 Connect(uri);//连接
reqFTP.Method = WebRequestMethods.Ftp.Rename;
 reqFTP.RenameTo = newFilename;
 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
 response.Close();
 }
 catch (Exception ex)
 {
 //Console.Write(ex.Message);
 MessageBox.Show(ex.Message);
 }
 }
 //获得文件明晰
public string[] GetFilesDetailList()
 {
 return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectoryDetails);
 }
 //获得文件明晰
public string[] GetFilesDetailList(string path)
 {
 return GetFileList("ftp://" + ftpServerIP + "/" + path, WebRequestMethods.Ftp.ListDirectoryDetails);
 }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值