zoukankan      html  css  js  c++  java
  • C# FTP操作类

    public class FtpWeb  
    {  
        string ftpRemotePath;  
        string ftpUserID;  
        string ftpPassword;  
        string ftpURI;  
        string ftpServerIP;  
      
        /// <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 FtpUserID, string FtpPassword)  
        {  
            ftpServerIP = FtpServerIP;  
            ftpUserID = FtpUserID;  
            ftpPassword = FtpPassword;  
            ftpURI = FtpServerIP + "/";  
        }  
      
        /// <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)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)  
            {  
                throw ex;  
            }  
        }  
        /// <summary>  
        /// 上传  
        /// </summary>  
        /// <param name="filename"></param>  
        public void Upload2(string ftpuri, string filename)  
        {  
            FileInfo fileInf = new FileInfo(filename);  
            string uri = ftpuri;  
            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)  
            {  
                throw ex;  
            }  
        }  
        /// <summary>  
        /// 下载  
        /// </summary>  
        /// <param name="filePath"></param>  
        /// <param name="fileName"></param>  
        public void Download(string filePath, string ftpUri, string fileName)  
        {  
            FtpWebRequest reqFTP;  
            try  
            {  
                FileStream outputStream = new FileStream(filePath + "\" + fileName, FileMode.Create);  
      
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpUri));  
                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;  
            }  
        }  
      
      
        /// <summary>  
        /// 删除文件  
        /// </summary>  
        /// <param name="fileName"></param>  
        public void Delete(string fileName)  
        {  
            try  
            {  
                string uri = 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)  
            {  
                throw ex;  
            }  
        }  
      
        /// <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)  
            {  
                throw ex;  
            }  
        }  
      
        /// <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);  
                string 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;  
                throw ex;  
            }  
        }  
      
        /// <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;  
                throw ex;  
            }  
        }  
      
        /// <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)  
        {  
            try  
            {  
                string[] dirList = GetDirectoryList();  
      
                foreach (string str in dirList)  
                {  
                    if (str.Trim() == RemoteDirectoryName.Trim())  
                    {  
                        return true;  
                    }  
                }  
                return false;  
            }  
            catch  
            {  
                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)  
            {  
                throw ex;  
            }  
        }  
      
        /// <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)  
            {  
                throw ex;  
            }  
            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)  
            {  
                throw ex;  
            }  
        }  
      
        /// <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 + "/";  
        }  
    }  
  • 相关阅读:
    Android开发 使用 adb logcat 显示 Android 日志
    【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410
    C语言 结构体相关 函数 指针 数组
    C语言 命令行参数 函数指针 gdb调试
    C语言 指针数组 多维数组
    Ubuntu 基础操作 基础命令 热键 man手册使用 关机 重启等命令使用
    C语言 内存分配 地址 指针 数组 参数 实例解析
    CRT 环境变量注意事项
    hadoop 输出文件 key val 分隔符
    com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Too many connections
  • 原文地址:https://www.cnblogs.com/zhangwei99com/p/7757674.html
Copyright © 2011-2022 走看看