zoukankan      html  css  js  c++  java
  • C# 操作FTP

    操作FTP管理类:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.IO;
    using System.Windows.Forms;
    
    namespace Demo
    {
        /// <summary>
        /// 用于ftp操作
        /// 罗旭成
        /// 2014-04-15
        /// </summary>
        public class FtpUpDown
        {
            string ftpServerIP;//服务器ip地
            string ftpUserID;//用户名
            string ftpPassword;//密码
            FtpWebRequest reqFTP;
    
            public FtpUpDown(string ftpServerIP, string ftpUserID, string ftpPassword)
            {
                this.ftpServerIP = ftpServerIP;
                this.ftpUserID = ftpUserID;
                this.ftpPassword = ftpPassword;
            }
    
            #region * 连接ftp
            private void Connect(string path)
            {
                // 根据uri创建FtpWebRequest对象
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
                // 指定数据传输类型
                reqFTP.UseBinary = true;
                // ftp用户名和密码
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            }
            #endregion
    
            #region * 从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();
                    }
                    // to remove the trailing '
    '
                    result.Remove(result.ToString().LastIndexOf('
    '), 1);
                    reader.Close();
                    response.Close();
                    return result.ToString().Split('
    ');
                }
                catch (Exception ex)
                {
                    System.Windows.Forms.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);
            }
            #endregion
    
            #region * 上传文件
            public void Upload(string filename) 
            {
                FileInfo fileInf = new FileInfo(filename);
                string uri = "ftp://" + ftpServerIP + "/" + 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);
                    }
    
                    // 关闭两个流
                    strm.Close();
                    fs.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Upload Error");
                }
            }
            #endregion
    
            #region * 下载文件
            public bool Download(string filePath, string fileName, out string errorinfo)
            {
                try
                {
                    String onlyFileName = Path.GetFileName(fileName);
                    string newFileName = filePath + "\" + onlyFileName;
                    if (File.Exists(newFileName))
                    {
                        errorinfo = string.Format("本地文件{0}已存在,无法下载", newFileName);
                        return false;
                    }
                    string url = "ftp://" + ftpServerIP + "/" + 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;
                }
            }
            #endregion
    
            #region * 删除文件
            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)
                {
                    MessageBox.Show(ex.Message, "删除错误");
                }
            }
            #endregion
    
            #region * 创建目录
            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)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            #endregion
    
            #region * 删除目录
            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(ex.Message);
                }
            }
            #endregion
    
            #region * 获得文件大小
            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)
                {
                    MessageBox.Show(ex.Message);
                }
                return fileSize;
            }
            #endregion
    
            #region * 文件改名
            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();
                    //Stream ftpStream = response.GetResponseStream();
                    //ftpStream.Close();
                    response.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            #endregion
    
            #region * 获得文件明细
            public string[] GetFilesDetailList()
            {
                return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectoryDetails);
            }
     
            public string[] GetFilesDetailList(string path)
            {
                return GetFileList("ftp://" + ftpServerIP + "/" + path, WebRequestMethods.Ftp.ListDirectoryDetails);
            }
            #endregion
        }
    }

    下载文件:

            #region * 下载文件
            private void btnDownload_Click(object sender, EventArgs e)
            {
                try
                {
                    string ftpServerIP = string.Empty;//服务器ip地
                    string ftpUserID = string.Empty;//用户名
                    string ftpPassword = string.Empty;//密码
                    if (CheckNull(ref ftpServerIP, ref ftpUserID, ref ftpPassword))
                    {
                        FtpUpDown ftpUpDown = new FtpUpDown(ftpServerIP, ftpUserID, ftpPassword);
                        string error = string.Empty;
                        ftpUpDown.Download(this.txtDir.Text.Trim(), this.txtFile.Text.Trim(), out error);
                        if (!string.IsNullOrEmpty(error))
                        {
                            MessageBox.Show(error);
                        }
                    }
                }
                catch (Exception eMsg)
                {
                    MessageBox.Show("下载文件出错:" + eMsg.ToString());
                }
            }
            #endregion

    上传文件:

            #region * 上传文件
            private void btnUpload_Click(object sender, EventArgs e)
            {
                try
                {
                    string file = string.Empty;
                    file = this.txtFile1.Text.Trim();
                    if (string.IsNullOrEmpty(file))
                    {
                        MessageBox.Show("文件名不能为空!");
                        return;
                    }
                    string ftpServerIP = string.Empty;//服务器ip地
                    string ftpUserID = string.Empty;//用户名
                    string ftpPassword = string.Empty;//密码
                    if (CheckNull(ref ftpServerIP, ref ftpUserID, ref ftpPassword))
                    {
                        FtpUpDown ftpUpDown = new FtpUpDown(ftpServerIP, ftpUserID, ftpPassword);
                        ftpUpDown.Upload(this.txtFile1.Text.Trim());
                    }
                }
                catch (Exception eMsg)
                {
                    MessageBox.Show("上传文件出错:" + eMsg.ToString());
                }
            }
            #endregion

    以上即是操作FTP。

  • 相关阅读:
    [贪心] Jzoj P4249 游戏
    [数学][快速幂] Jzoj P4248 n染色
    [dfs] Jzoj P4252 QYQ的图
    [折半搜索][has] Jzoj P4250 路径
    [计数dp][数学] Jzoj P4254 集体照
    [Tarjan][并查集][dp] Jzoj P4253 QYQ在艾泽拉斯
    [支配树][lca][倍增][线段树][拓扑] Jzoj P4240 游行
    [贪心] Jzoj P4244 yi
    [数位dp] Jzoj P4239 光棍
    [扫描线][差分约束] Jzoj P4238 纪念碑
  • 原文地址:https://www.cnblogs.com/jara/p/3669477.html
Copyright © 2011-2022 走看看