• C# FTP 访问、下载、上传


    /// <summary>
    /// 获取地址下的列表
    /// </summary>
    /// <returns></returns>
    public static string[] GetFileList()
    {
    string[] downloadFiles;
    StringBuilder result = new StringBuilder();
    FtpWebRequest reqFTP;
    try
    {
    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/"));
    reqFTP.UseBinary = true;
    reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
    WebResponse response = reqFTP.GetResponse();
    StreamReader reader = new StreamReader(response.GetResponseStream());
    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;
    }
    }
    /// <summary>
    /// 上传
    /// </summary>
    /// <param name="filename">文件流</param>
    private static void Upload(string filename)
    {
    FileInfo fileInf = new FileInfo(filename);
    string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
    FtpWebRequest reqFTP;

    // 根据uri创建FtpWebRequest对象
    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));

    // ftp用户名和密码
    reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

    // 默认为true,连接不会被关闭
    // 在一个命令之后被执行
    reqFTP.KeepAlive = false;

    // 指定执行什么命令
    reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

    // 指定数据传输类型
    reqFTP.UseBinary = true;

    // 上传文件时通知服务器文件的大小
    reqFTP.ContentLength = fileInf.Length;

    // 缓冲大小设置为2kb
    int buffLength = 2048;

    byte[] buff = new byte[buffLength];
    int contentLen;

    // 打开一个文件流 (System.IO.FileStream) 去读上传的文件
    FileStream fs = fileInf.OpenRead();
    try
    {
    // 把上传的文件写入流
    Stream strm = reqFTP.GetRequestStream();

    // 每次读文件流的2kb
    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)
    {
    throw ex;
    }
    }
    /// <summary>
    /// 下载
    /// </summary>
    /// <param name="filePath">下载地址</param>
    /// <param name="fileName">下载文件的名称(下载后名称)</param>
    private static void Download(string filePath, string fileName)
    {
    FtpWebRequest reqFTP;

    try
    {
    FileStream outputStream = new FileStream(filePath + "\" + fileName, FileMode.Create);

    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName));

    reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;

    reqFTP.UseBinary = true;

    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);

    while (readCount > 0)
    {
    outputStream.Write(buffer, 0, readCount);

    readCount = ftpStream.Read(buffer, 0, bufferSize);
    }

    ftpStream.Close();

    outputStream.Close();

    response.Close();
    }
    catch (Exception ex)
    {
    throw ex;
    }
    }

    参考 https://www.cnblogs.com/webabcd/archive/2007/01/21/626242.html

  • 相关阅读:
    《数据结构》树与二叉树
    C/C++ 一点笔记(1)
    c#中隐藏基类方法的作用
    VS2010 灵活运用快捷操作功能(新手必看)
    C# 之类复制 MemberwiseClone与Clone(深 浅 Clone)
    DLL笔记
    批处理文件
    .NET Remoting(一)
    MSI安装数据库
    关于用户角色权限的一点想法(RBAC)
  • 原文地址:https://www.cnblogs.com/vsnb/p/12937329.html
Copyright © 2020-2023  润新知