zoukankan      html  css  js  c++  java
  • C# Ftp Client 基本操作

    C# Ftp Client 上传、下载与删除

        简单介绍一下Ftp Client 上传、下载与删除,这是目前比较常用的命令,各个方法其实都差不多,重点是了解Ftp命令协议。

    1.建立连接

            public static string Connect(string path, string Login, string Password)
            {
                try
                {
                    // 根据uri创建FtpWebRequest对象
                    reqFTP = (FtpWebRequest)WebRequest.Create(new Uri(path));
    
                    //指定命令
                    reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
    
                    // 指定数据传输类型
                    reqFTP.UseBinary = true;
    
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(Login, Password);
    
                    //
                    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    
                    return "FTP连接成功";
                }
                catch(Exception ex)
                {
                    return "FTP连接失败," + ex.Message;
                }
                
            }

    2.上传文件

            public static string UploadFile(string filename, string FtpPath, string Login, string Password)
            {
                try
    
                {
                    FileInfo fileInf = new FileInfo(filename);
    
                    //判断是否有上级目录
    
                    string uri = "ftp://" + Path.Combine(FtpPath, fileInf.Name);
    
                    // 根据uri创建FtpWebRequest对象
                    reqFTP = (FtpWebRequest)WebRequest.Create(new Uri(uri));
    
                    // 指定数据传输类型
                    reqFTP.UseBinary = true;
    
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(Login, Password);
    
                    // 默认为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();
    
    
    
                    // 把上传的文件写入流
    
                    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();
                    //Successinfo
                    return string.Format("本地文件{0}已成功上传", fileInf.Name);
                }
    
                catch (Exception ex)
    
                {
                    //ErrorInfo
                    return "上传失败" + ex.Message;
                }
    
            }

    3.下载文件

            public static string DownloadFile(string fileDownPath, string fileName, string FtpPath, string Login, string Password)
            {
                try
                {
                    string onlyFileName = Path.GetFileName(fileName);
    
                    string newFileName = fileDownPath + onlyFileName;
    
                    if (File.Exists(newFileName))
    
                    {
    
                        string errorinfo = string.Format("文件{0}在该目录下已存在,无法下载", fileName);
    
                        return errorinfo;
                    }
    
                    string uri = "ftp://" + Path.Combine(FtpPath, fileName);
    
                    // 根据uri创建FtpWebRequest对象
                    reqFTP = (FtpWebRequest)WebRequest.Create(new Uri(uri));
    
                    // 指定数据传输类型
                    reqFTP.UseBinary = true;
    
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(Login, Password);
    
                    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();
    
                    //Successinfo
    
                    return string.Format("服务器文件{0}已成功下载", fileName);
    
                }
    
                catch (Exception ex)
    
                {
                    //errorinfo
                    return string.Format("因{0},无法下载", ex.Message);
    
                }
    
            }

    4.删除文件

            public static string DeleteFile(string fileName, string FtpPath, string Login, string Password)
            {
                try
                {
                    FileInfo fileInf = new FileInfo(fileName);
    
                    string uri = "ftp://" + Path.Combine(FtpPath, fileInf.Name);
    
                    // 根据uri创建FtpWebRequest对象
                    reqFTP = (FtpWebRequest)WebRequest.Create(new Uri(uri));
    
                    // 指定数据传输类型
                    reqFTP.UseBinary = true;
    
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(Login, Password);
    
                    // 默认为true,连接不会被关闭
    
                    // 在一个命令之后被执行
    
                    reqFTP.KeepAlive = false;
    
                    // 指定执行什么命令
    
                    reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
    
                    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    
                    response.Close();
    
                    //Successinfo
    
                    return string.Format("文件{0}已成功删除", fileInf.Name);
                }
    
                catch (Exception ex)
                {
                    //ErrorInfo 
                    return string.Format("文件因{0},无法删除", ex.Message);
                }
    
            }
  • 相关阅读:
    面向对象进阶
    20191011作业
    2019.10.10作业
    类的继承
    面向对象
    2019.10.09作业
    pandas模块
    [BZOJ 2190][SDOI2008]仪仗队(欧拉函数)
    [BZOJ 2729][HNOI2012]排队(组合数学+高精)
    [BZOJ 1491][NOI2007]社交网络(Floyd)
  • 原文地址:https://www.cnblogs.com/ocean-wang/p/10971993.html
Copyright © 2011-2022 走看看