FTP上传、下载(简单小例子)

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

namespace FTPConsoleApplication
{
    class Program  
    {  
        static void Main(string[] args)  
        {
            //测试
            //DownloadFtp("优课.png");
            //UploadFtp("FTPConsoleApplication.exe.config");
            //SystemLog.logger("OK"); 
        }  
  
        public static FtpStatusCode UploadFileInFTP(string filename)  
        {  
            Stream requestStream = null;  
            FileStream fileStream = null;  
            FtpWebResponse uploadResponse = null;  
            FtpWebRequest uploadRequest = null;  
            string serverIP;  
            string userName;  
            string password;  
            string uploadurl;  
  
            try  
            {  
                serverIP = System.Configuration.ConfigurationManager.AppSettings["FTPServerIP"];  
                userName = System.Configuration.ConfigurationManager.AppSettings["UserName"];  
                password = System.Configuration.ConfigurationManager.AppSettings["Password"];  
                uploadurl = "ftp://" + serverIP + "/" + Path.GetFileName(filename);  
                uploadRequest = (FtpWebRequest)WebRequest.Create(uploadurl);  
                uploadRequest.Method = WebRequestMethods.Ftp.UploadFile;  
                uploadRequest.Proxy = null;  
                NetworkCredential nc = new NetworkCredential();  
                nc.UserName = userName;  
                nc.Password = password;  
                uploadRequest.Credentials = nc;  
                requestStream = uploadRequest.GetRequestStream();  
                fileStream = File.Open(filename, FileMode.Open);  
  
                byte[] buffer = new byte[1024];  
                int bytesRead;  
  
                while (true)  
                {  
                    bytesRead = fileStream.Read(buffer, 0, buffer.Length);  
                    if (bytesRead == 0)  
                    {  
                        break;  
                    }  
                    requestStream.Write(buffer, 0, bytesRead);  
                }  
  
                requestStream.Close();  
                uploadResponse = (FtpWebResponse)uploadRequest.GetResponse();  
                return uploadResponse.StatusCode;  
            }  
            catch (Exception e)  
            {  
                SystemLog.logger(e.InnerException.Message);  
            }  
            finally  
            {  
                if (uploadResponse != null)  
                {  
                    uploadResponse.Close();  
                }  
                if (fileStream != null)  
                {  
                    fileStream.Close();  
                }  
                if (requestStream != null)  
                {  
                    requestStream.Close();  
                }  
  
            }  
            return FtpStatusCode.Undefined;  
        }  
  
  
        public static int UploadFtp(string filename)  
        {  
            FtpWebRequest reqFTP = null;  
            string serverIP;  
            string userName;  
            string password;  
            string url;  
  
            try  
            {  
                 FileInfo fileInf = new FileInfo(filename);
                 serverIP = System.Configuration.ConfigurationManager.AppSettings["FTPServerIP"];
                 userName = System.Configuration.ConfigurationManager.AppSettings["UserName"];
                 password = System.Configuration.ConfigurationManager.AppSettings["Password"];  
                 url = "ftp://" + serverIP + "/" + Path.GetFileName(filename);  
   
                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));  
                 reqFTP.Credentials = new NetworkCredential(userName, password);  
                 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.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite);  
   
                 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();  
                 return 0;  
             }  
             catch (Exception ex)  
             {  
                 if (reqFTP != null)  
                 {  
                     reqFTP.Abort();  
                 }  
                 SystemLog.logger(ex.InnerException.Message);  
                 return -2;  
             }  
         }  
   
   
         public static int DownloadFtp(string filename)  
         {  
             FtpWebRequest reqFTP;  
             string serverIP;  
             string userName;  
             string password;  
             string url;  
   
             try  
             {
                 serverIP = System.Configuration.ConfigurationManager.AppSettings["FTPServerIP"];
                 userName = System.Configuration.ConfigurationManager.AppSettings["UserName"];
                 password = System.Configuration.ConfigurationManager.AppSettings["Password"];  
                 url = "ftp://" + serverIP + "/" + Path.GetFileName(filename);  
   
                 FileStream outputStream = new FileStream(filename, FileMode.Create);  
                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));  
                 reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;  
                 reqFTP.UseBinary = true;  
                 reqFTP.KeepAlive = false;  
                 reqFTP.Credentials = new NetworkCredential(userName, 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);  
                 while (readCount > 0)  
                 {  
                     outputStream.Write(buffer, 0, readCount);  
                     readCount = ftpStream.Read(buffer, 0, bufferSize);  
                 }  
                 ftpStream.Close();  
                 outputStream.Close();  
                 response.Close();  
                 return 0;  
             }  
             catch (Exception ex)  
             {  
                 SystemLog.logger(ex.InnerException.Message);  
                 return -2;  
             }  
         }  
   
   
         public class SystemLog  
         {  
   
             public static bool logger(string message)  
             {  
                 try  
                 {  
                     DateTime timeNow = DateTime.Now;  
                     string logPath = System.Configuration.ConfigurationManager.AppSettings["LogPath"];  
                     string logSwitch = System.Configuration.ConfigurationManager.AppSettings["LogSwitch"];  
                     if (logSwitch == "1")  
                     {  
                         string logFullPath = Path.Combine(System.Environment.CurrentDirectory,logPath);
                         DirectoryInfo dirInfo = new DirectoryInfo(logFullPath);
                         if (!dirInfo.Exists)
                         {
                             dirInfo.Create();
                         }

                         Encoding encoding = Encoding.GetEncoding("gb2312");  
                         byte[] info = encoding.GetBytes("[ " + timeNow.ToString("yyyy-MM-dd HH:mm:ss") + " ] " + message + "\n"); //转换编码成字节串  

                         if (!logPath.EndsWith(Path.DirectorySeparatorChar.ToString()))
                         {
                             logPath = logPath + Path.DirectorySeparatorChar.ToString();
                         }  
                        
                         using (FileStream fs = System.IO.File.Open(logPath + timeNow.ToString("yyyy_MM_dd") + ".txt", FileMode.Append, FileAccess.Write, FileShare.ReadWrite))  
                         {  
                             fs.Write(info, 0, info.Length);  
                             //以ASCII方式编写  
                             using (StreamWriter w = new StreamWriter(fs, Encoding.ASCII))  
                             {  
                                 w.Flush();  
                                 w.Close();  
                             }  
   
                             fs.Close();  
                         }  
                     }  
                     return true;  
                 }  
                 catch (Exception e)  
                 {  
                     return false;  
                 }  
             }  
         }  
   
     }  

}
View Code

 

posted @ 2017-02-20 15:25  慧由心生  阅读(1462)  评论(0编辑  收藏  举报