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

来源:互联网 发布:vimeo视频下载软件 编辑:程序博客网 时间:2024/06/05 08:25
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); } }}

1 0