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 + " "); //转换编码成字节串 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; } } } } }