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);
                }
    
            }
  • 相关阅读:
    element ui 表单清空
    element ui 覆盖样式 方法
    element ui 修改表单值 提交无效
    element ui 抽屉里的表单输入框无法修改值
    element ui 抽屉首次显示 闪烁
    css 左侧高度 跟随右侧内容高度 自适应
    PICNUF框架
    elementui 抽屉组件标题 出现黑色边框
    vue 子组件跨多层调用父组件中方法
    vue 编辑table 数据 未点击提交,table里的数据就发生了改变(深拷贝处理)
  • 原文地址:https://www.cnblogs.com/ocean-wang/p/10971993.html
Copyright © 2011-2022 走看看