zoukankan      html  css  js  c++  java
  • ftp

    最近做了一个关于ftp的小程序,欢迎批评指正。

    1)首先我现在本机模拟了一个服务器。

      a)需要下载一个Ser-U的软件的软件,现在本地设置一个服务器。

          下载地址:http://www.cnd8.com/zt/ServU/

           设置域:http://jingyan.baidu.com/article/3065b3b6d66dd8becff8a482.html(注意版本的选择)

    2)核心代码如下:

    public class FtpWeb
    {
    string ftpServerIP;
    string ftpRemotePath;
    string ftpUserID;
    string ftpPassword;
    string ftpURI;
    /// <summary>
    /// 连接FTP
    /// </summary>
    /// <param name="FtpServerIP">FTP连接地址</param>
    /// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param>
    /// <param name="FtpUserID">用户名</param>
    /// <param name="FtpPassword">密码</param>
    public FtpWeb(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword)
    {
    ftpServerIP = FtpServerIP;
    ftpRemotePath = FtpRemotePath;
    ftpUserID = FtpUserID;
    ftpPassword = FtpPassword;
    ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
    }
    public void Upload(string filename)
    {
    FileInfo fileInf = new FileInfo(filename);
    string uri = ftpURI + fileInf.Name;
    FtpWebRequest reqFTP;

    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
    reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    reqFTP.KeepAlive = false;
    reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
    reqFTP.UseBinary = true;
    reqFTP.ContentLength = fileInf.Length;
    int buffLength = 2048;
    byte[] buff = new byte[buffLength];
    int contentLen;
    FileStream fs = fileInf.OpenRead();
    try
    {
    Stream strm = reqFTP.GetRequestStream();
    contentLen = fs.Read(buff, 0, buffLength);
    while (contentLen != 0)
    {
    strm.Write(buff, 0, contentLen);
    contentLen = fs.Read(buff, 0, buffLength);
    }
    strm.Close();
    fs.Close();
    }
    catch (Exception ex)
    {
    MessageBox.Show("FtpWeb" + "Upload Error --> " + ex.Message);
    return;
    }

    }
    /// <summary>
    /// 下载
    /// </summary>
    /// <param name="filePath"></param>
    /// <param name="fileName"></param>
    public bool Download(string filePath, string fileName)
    {
    FtpWebRequest reqFTP;
    try
    {
    //要下载的服务器的文件路径
    FileStream outputStream = new FileStream(filePath + "\" + fileName, FileMode.Create);
    //,FileAccess.Read,FileShare.ReadWrite

    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + 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();
    return true;
    }
    catch (Exception ex)
    {
    MessageBox.Show("FtpWeb" + "Download Error --> " + ex.Message);
    return false;
    }
    }
    /// <summary>
    /// 从ftp服务器上获得文件列表
    /// </summary>
    /// <param name="RequedstPath">服务器下的相对路径</param>
    /// <returns></returns>
    public List<string> GetFile(string RequedstPath, string username, string password, string path)
    {
    List<string> strs = new List<string>();
    try
    {
    string uri = "ftp://" + path + "/" + RequedstPath; //目标路径 path为服务器地址
    //"ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
    FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
    // ftp用户名和密码
    reqFTP.Credentials = new NetworkCredential(username, password);
    reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
    WebResponse response = reqFTP.GetResponse();
    StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名

    string line = reader.ReadLine();
    while (line != null)
    {
    if (!line.Contains("<DIR>"))
    {
    //string msg = line.Substring(39).Trim();
    string msg = line.Split().Last();
    if (msg.Length > 1 && msg.Split('.').Length == 2)
    {
    strs.Add(msg);
    }
    }
    line = reader.ReadLine();
    }
    reader.Close();
    response.Close();
    return strs;
    }
    catch (Exception ex)
    {
    Console.WriteLine("获取文件出错:" + ex.Message);
    }
    return strs;
    }
    /// <summary>
    /// 创建文件夹
    /// </summary>
    /// <param name="dirName"></param>
    public void MakeDir(string dirName)
    {
    FtpWebRequest reqFTP;
    try
    {
    // dirName = name of the directory to create.
    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + dirName));
    reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
    reqFTP.UseBinary = true;
    reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    Stream ftpStream = response.GetResponseStream();
    ftpStream.Close();
    response.Close();
    }
    catch (Exception ex)
    {
    MessageBox.Show("FtpWeb" + "MakeDir Error --> " + ex.Message);
    }
    }
    }

           

  • 相关阅读:
    Codeforces 627A XOR Equation(思路)
    Codeforces 633C Spy Syndrome 2(DP + Trie树)
    BZOJ 1982 [Spoj 2021]Moving Pebbles(博弈论)
    BZOJ 3676 [Apio2014]回文串(回文树)
    BZOJ 3790 神奇项链(manacher+DP+树状数组)
    Codeforces 449D Jzzhu and Numbers(高维前缀和)
    SPOJ Time Limit Exceeded(高维前缀和)
    BZOJ 4031 [HEOI2015]小Z的房间(Matrix-Tree定理)
    BZOJ 3809 Gty的二逼妹子序列(莫队+分块)
    BZOJ 3544 [ONTAK2010]Creative Accounting(set)
  • 原文地址:https://www.cnblogs.com/v-haoz/p/7603283.html
Copyright © 2011-2022 走看看