zoukankan      html  css  js  c++  java
  • C#WPF做FTP上传下载获取文件列表

    Xaml.cs:

    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+" ");
    }
    }
    //上传
    private void Button_Click_2(object sender, RoutedEventArgs e)
    {
    FtpUpDown ftp = new FtpUpDown(ftpServerIP, ftpUserID, ftpPassword);
    string localpath = @"D:image5.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(" ");
    line = reader.ReadLine();
    }
    result.Remove(result.ToString().LastIndexOf(' '), 1);
    reader.Close();
    response.Close();
    return result.ToString().Split(' ');
    }
    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);
    }
    }
    }

  • 相关阅读:
    python3第六天
    python3第五天
    python3第四天
    python3 第三天
    python3第二天
    python3(2)
    python3(1)
    网络通信 & 初识socket
    python中包的语法
    模块语法
  • 原文地址:https://www.cnblogs.com/len0031/p/3492258.html
Copyright © 2011-2022 走看看