• Ftp上传的方法


    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Net;
    using System.Text;

    namespace EvMS.Common.Data
    {
    /// <summary>
    /// FtpWeb公共工具类
    /// </summary>
    public class FtpUtils
    {
    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 FtpUtils(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword)
    {
    ftpServerIP = FtpServerIP;
    ftpRemotePath = FtpRemotePath;
    ftpUserID = FtpUserID;
    ftpPassword = FtpPassword;
    ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
    }

    /// <summary>
    /// 上传
    /// </summary>
    /// <param name="filename"></param>
    public void Upload(string filename)
    {
    FileInfo fileInf = new FileInfo(filename);
    string uri = ftpURI + fileInf.Name;
    FtpWebRequest reqFTP;

    reqFTP = (FtpWebRequest)WebRequest.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)
    {
    Insert_Standard_ErrorLog.Insert("FtpWeb", "Upload Error --> " + ex.Message);
    }
    }

    /// <summary>
    /// 下载
    /// </summary>
    /// <param name="filePath"></param>
    /// <param name="fileName"></param>
    public void Download(string filePath, string fileName)
    {
    FtpWebRequest reqFTP;
    try
    {
    FileStream outputStream = new FileStream(filePath + "\" + fileName, FileMode.Create);

    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();
    }
    catch (Exception ex)
    {
    Insert_Standard_ErrorLog.Insert("FtpWeb", "Download Error --> " + ex.Message);
    }
    }

    /// <summary>
    /// 删除文件
    /// </summary>
    /// <param name="fileName"></param>
    public void Delete(string fileName)
    {
    try
    {
    string uri = ftpURI + fileName;
    FtpWebRequest reqFTP;
    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

    reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    reqFTP.KeepAlive = false;
    reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;

    string result = String.Empty;
    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    long size = response.ContentLength;
    Stream datastream = response.GetResponseStream();
    StreamReader sr = new StreamReader(datastream);
    result = sr.ReadToEnd();
    sr.Close();
    datastream.Close();
    response.Close();
    }
    catch (Exception ex)
    {
    Insert_Standard_ErrorLog.Insert("FtpWeb", "Delete Error --> " + ex.Message + " 文件名:" + fileName);
    }
    }

    /// <summary>
    /// 删除文件夹
    /// </summary>
    /// <param name="folderName"></param>
    public void RemoveDirectory(string folderName)
    {
    try
    {
    string uri = ftpURI + folderName;
    FtpWebRequest reqFTP;
    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

    reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    reqFTP.KeepAlive = false;
    reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;

    string result = String.Empty;
    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    long size = response.ContentLength;
    Stream datastream = response.GetResponseStream();
    StreamReader sr = new StreamReader(datastream);
    result = sr.ReadToEnd();
    sr.Close();
    datastream.Close();
    response.Close();
    }
    catch (Exception ex)
    {
    Insert_Standard_ErrorLog.Insert("FtpWeb", "Delete Error --> " + ex.Message + " 文件名:" + folderName);
    }
    }

    /// <summary>
    /// 获取当前目录下明细(包含文件和文件夹)
    /// </summary>
    /// <returns></returns>
    public string[] GetFilesDetailList()
    {
    string[] downloadFiles;
    try
    {
    StringBuilder result = new StringBuilder();
    FtpWebRequest ftp;
    ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
    ftp.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
    WebResponse response = ftp.GetResponse();
    StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);

    //while (reader.Read() > 0)
    //{

    //}
    string line = reader.ReadLine();
    //line = reader.ReadLine();
    //line = reader.ReadLine();

    while (line != null)
    {
    result.Append(line);
    result.Append(" ");
    line = reader.ReadLine();
    }
    result.Remove(result.ToString().LastIndexOf(" "), 1);
    reader.Close();
    response.Close();
    return result.ToString().Split(' ');
    }
    catch (Exception ex)
    {
    downloadFiles = null;
    Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFilesDetailList Error --> " + ex.Message);
    return downloadFiles;
    }
    }

    /// <summary>
    /// 获取当前目录下文件列表(仅文件)
    /// </summary>
    /// <returns></returns>
    public string[] GetFileList(string mask)
    {
    string[] downloadFiles;
    StringBuilder result = new StringBuilder();
    FtpWebRequest reqFTP;
    try
    {
    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
    reqFTP.UseBinary = true;
    reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
    WebResponse response = reqFTP.GetResponse();
    StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);

    string line = reader.ReadLine();
    while (line != null)
    {
    if (mask.Trim() != string.Empty && mask.Trim() != "*.*")
    {

    string mask_ = mask.Substring(0, mask.IndexOf("*"));
    if (line.Substring(0, mask_.Length) == mask_)
    {
    result.Append(line);
    result.Append(" ");
    }
    }
    else
    {
    result.Append(line);
    result.Append(" ");
    }
    line = reader.ReadLine();
    }
    result.Remove(result.ToString().LastIndexOf(' '), 1);
    reader.Close();
    response.Close();
    return result.ToString().Split(' ');
    }
    catch (Exception ex)
    {
    downloadFiles = null;
    if (ex.Message.Trim() != "远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。")
    {
    Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFileList Error --> " + ex.Message.ToString());
    }
    return downloadFiles;
    }
    }

    /// <summary>
    /// 获取当前目录下所有的文件夹列表(仅文件夹)
    /// </summary>
    /// <returns></returns>
    public string[] GetDirectoryList()
    {
    string[] drectory = GetFilesDetailList();
    string m = string.Empty;
    foreach (string str in drectory)
    {
    int dirPos = str.IndexOf("<DIR>");
    if (dirPos > 0)
    {
    /*判断 Windows 风格*/
    m += str.Substring(dirPos + 5).Trim() + " ";
    }
    else if (str.Trim().Substring(0, 1).ToUpper() == "D")
    {
    /*判断 Unix 风格*/
    string dir = str.Substring(54).Trim();
    if (dir != "." && dir != "..")
    {
    m += dir + " ";
    }
    }
    }

    char[] n = new char[] { ' ' };
    return m.Split(n);
    }

    /// <summary>
    /// 判断当前目录下指定的子目录是否存在
    /// </summary>
    /// <param name="RemoteDirectoryName">指定的目录名</param>
    public bool DirectoryExist(string RemoteDirectoryName)
    {
    string[] dirList = GetDirectoryList();
    foreach (string str in dirList)
    {
    if (str.Trim() == RemoteDirectoryName.Trim())
    {
    return true;
    }
    }
    return false;
    }

    /// <summary>
    /// 判断当前目录下指定的文件是否存在
    /// </summary>
    /// <param name="RemoteFileName">远程文件名</param>
    public bool FileExist(string RemoteFileName)
    {
    string[] fileList = GetFileList("*.*");
    foreach (string str in fileList)
    {
    if (str.Trim() == RemoteFileName.Trim())
    {
    return true;
    }
    }
    return false;
    }

    /// <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)
    {
    Insert_Standard_ErrorLog.Insert("FtpWeb", "MakeDir Error --> " + ex.Message);
    }
    }

    /// <summary>
    /// 获取指定文件大小
    /// </summary>
    /// <param name="filename"></param>
    /// <returns></returns>
    public long GetFileSize(string filename)
    {
    FtpWebRequest reqFTP;
    long fileSize = 0;
    try
    {
    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + filename));
    reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
    reqFTP.UseBinary = true;
    reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    Stream ftpStream = response.GetResponseStream();
    fileSize = response.ContentLength;

    ftpStream.Close();
    response.Close();
    }
    catch (Exception ex)
    {
    Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFileSize Error --> " + ex.Message);
    }
    return fileSize;
    }

    /// <summary>
    /// 改名
    /// </summary>
    /// <param name="currentFilename"></param>
    /// <param name="newFilename"></param>
    public void ReName(string currentFilename, string newFilename)
    {
    FtpWebRequest reqFTP;
    try
    {
    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + currentFilename));
    reqFTP.Method = WebRequestMethods.Ftp.Rename;
    reqFTP.RenameTo = newFilename;
    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)
    {
    Insert_Standard_ErrorLog.Insert("FtpWeb", "ReName Error --> " + ex.Message);
    }
    }

    /// <summary>
    /// 移动文件
    /// </summary>
    /// <param name="currentFilename"></param>
    /// <param name="newFilename"></param>
    public void MovieFile(string currentFilename, string newDirectory)
    {
    ReName(currentFilename, newDirectory);
    }

    /// <summary>
    /// 切换当前目录
    /// </summary>
    /// <param name="DirectoryName"></param>
    /// <param name="IsRoot">true 绝对路径 false 相对路径</param>
    public void GotoDirectory(string DirectoryName, bool IsRoot)
    {
    if (IsRoot)
    {
    ftpRemotePath = DirectoryName;
    }
    else
    {
    ftpRemotePath += DirectoryName + "/";
    }
    ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
    }

    /// <summary>
    /// 删除订单目录
    /// </summary>
    /// <param name="ftpServerIP">FTP 主机地址</param>
    /// <param name="folderToDelete">FTP 用户名</param>
    /// <param name="ftpUserID">FTP 用户名</param>
    /// <param name="ftpPassword">FTP 密码</param>
    public static void DeleteOrderDirectory(string ftpServerIP, string folderToDelete, string ftpUserID, string ftpPassword)
    {
    try
    {
    if (!string.IsNullOrEmpty(ftpServerIP) && !string.IsNullOrEmpty(folderToDelete) && !string.IsNullOrEmpty(ftpUserID) && !string.IsNullOrEmpty(ftpPassword))
    {
    FtpUtils fw = new FtpUtils(ftpServerIP, folderToDelete, ftpUserID, ftpPassword);
    //进入订单目录
    fw.GotoDirectory(folderToDelete, true);
    //获取规格目录
    string[] folders = fw.GetDirectoryList();
    foreach (string folder in folders)
    {
    if (!string.IsNullOrEmpty(folder) || folder != "")
    {
    //进入订单目录
    string subFolder = folderToDelete + "/" + folder;
    fw.GotoDirectory(subFolder, true);
    //获取文件列表
    string[] files = fw.GetFileList("*.*");
    if (files != null)
    {
    //删除文件
    foreach (string file in files)
    {
    fw.Delete(file);
    }
    }
    //删除冲印规格文件夹
    fw.GotoDirectory(folderToDelete, true);
    fw.RemoveDirectory(folder);
    }
    }

    //删除订单文件夹
    string parentFolder = folderToDelete.Remove(folderToDelete.LastIndexOf('/'));
    string orderFolder = folderToDelete.Substring(folderToDelete.LastIndexOf('/') + 1);
    fw.GotoDirectory(parentFolder, true);
    fw.RemoveDirectory(orderFolder);
    }
    else
    {
    throw new Exception("FTP 及路径不能为空!");
    }
    }
    catch (Exception ex)
    {
    throw new Exception("删除订单时发生错误,错误信息为:" + ex.Message);
    }
    }
    }


    public class Insert_Standard_ErrorLog
    {
    public static void Insert(string x, string y)
    {

    }
    }

    }

  • 相关阅读:
    backtrace、backtrace_symbols、backtrace_symbols_fd-support for application self-debugging
    基于linux与busybox的reboot命令流程分析
    Ubuntu Linux 查看、编辑、比较二进制文件
    SecureCRT中的vim出现1H特殊字符
    单例模式和静态方法
    linux ls命令按时间显示文件
    Shallow Heap & Retained Heap
    jedis连接池的参数配置
    jvm参数设置和性能调优
    并发和并行的区别
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/9882878.html
Copyright © 2020-2023  润新知