真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C#開發(fā)windows服務(wù)實(shí)現(xiàn)自動從FTP服務(wù)器下載文件

最近在做一個每天定點(diǎn)從FTP自動下載節(jié)目.xml并更新到數(shù)據(jù)庫的功能。首先想到用 FileSystemWatcher來監(jiān)控下載到某個目錄中的文件是否發(fā)生改變,如果改變就執(zhí)行相應(yīng)的操作,然后用timer來設(shè)置隔多長時間來下載。后來又想想,用windwos服務(wù)來實(shí)現(xiàn)。

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、網(wǎng)站制作、漳州網(wǎng)絡(luò)推廣、小程序開發(fā)、漳州網(wǎng)絡(luò)營銷、漳州企業(yè)策劃、漳州品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供漳州建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com

效果圖:

C#開發(fā)windows服務(wù)實(shí)現(xiàn)自動從FTP服務(wù)器下載文件

執(zhí)行的Log日志:

INFO-2016/5/24 0:30:07--日志內(nèi)容為:0/30/7進(jìn)行time觸發(fā)
INFO-2016/5/24 1:30:07--日志內(nèi)容為:1/30/7進(jìn)行time觸發(fā)
INFO-2016/5/24 2:30:07--日志內(nèi)容為:2/30/7進(jìn)行time觸發(fā)
INFO-2016/5/24 3:30:07--日志內(nèi)容為:3/30/7進(jìn)行time觸發(fā)
INFO-2016/5/24 4:30:07--日志內(nèi)容為:4/30/7進(jìn)行time觸發(fā)
INFO-2016/5/24 5:30:07--日志內(nèi)容為:5/30/7進(jìn)行time觸發(fā)
INFO-2016/5/24 6:30:07--日志內(nèi)容為:6/30/7進(jìn)行time觸發(fā)
INFO-2016/5/24 7:30:07--日志內(nèi)容為:7/30/7進(jìn)行time觸發(fā)
INFO-2016/5/24 7:30:07--日志內(nèi)容為:TimerEvent 01
INFO-2016/5/24 7:30:07--日志內(nèi)容為:TimerEvent 01 :共獲取77個節(jié)目列表信息成功。
INFO-2016/5/24 7:31:08--日志內(nèi)容為:服務(wù)器與本地節(jié)目列表信息進(jìn)行對比開始。
INFO-2016/5/24 7:31:08--日志內(nèi)容為:得到要更新的節(jié)目列表共77個
INFO-2016/5/24 7:31:08--日志內(nèi)容為:FileEvent 01 :BTV-1(高清).xml文件重新下載開始。
INFO-2016/5/24 7:31:08--日志內(nèi)容為:FileEvent 01 :BTV-1(高清).xml文件內(nèi)容已于2016/05/24 00:01進(jìn)行changed并重新下載成功。
INFO-2016/5/24 7:31:08--日志內(nèi)容為:FileEvent 01 :BTV-1(高清).xml文件下載后的修改時間開始與服務(wù)器修改時間同步開始。
INFO-2016/5/24 7:31:08--日志內(nèi)容為:FileEvent 01 :BTV-1(高清).xml文件下載后的修改時間開始與服務(wù)器修改時間同步成功。
INFO-2016/5/24 7:31:08--日志內(nèi)容為:FileEvent 02 :CCTV-1(高清).xml文件重新下載開始。
INFO-2016/5/24 7:31:08--日志內(nèi)容為:FileEvent 02 :CCTV-1(高清).xml文件內(nèi)容已于2016/05/24 00:01進(jìn)行changed并重新下載成功。
INFO-2016/5/24 7:31:08--日志內(nèi)容為:FileEvent 02 :CCTV-1(高清).xml文件下載后的修改時間開始與服務(wù)器修改時間同步開始。
INFO-2016/5/24 7:31:08--日志內(nèi)容為:FileEvent 02 :CCTV-1(高清).xml文件下載后的修改時間開始與服務(wù)器修改時間同步成功。
INFO-2016/5/24 7:31:33--日志內(nèi)容為:FileEvent 77 :黑龍江衛(wèi)視(高清).xml文件重新下載開始。
INFO-2016/5/24 7:31:33--日志內(nèi)容為:FileEvent 77 :黑龍江衛(wèi)視(高清).xml文件內(nèi)容已于2016/05/24 00:01進(jìn)行changed并重新下載成功。
INFO-2016/5/24 7:31:33--日志內(nèi)容為:FileEvent 77 :黑龍江衛(wèi)視(高清).xml文件下載后的修改時間開始與服務(wù)器修改時間同步開始。
INFO-2016/5/24 7:31:33--日志內(nèi)容為:FileEvent 77 :黑龍江衛(wèi)視(高清).xml文件下載后的修改時間開始與服務(wù)器修改時間同步成功。
INFO-2016/5/24 8:31:08--日志內(nèi)容為:8/31/8進(jìn)行time觸發(fā)
INFO-2016/5/24 9:31:08--日志內(nèi)容為:9/31/8進(jìn)行time觸發(fā)
INFO-2016/5/24 10:31:08--日志內(nèi)容為:10/31/8進(jìn)行time觸發(fā)
INFO-2016/5/24 11:31:08--日志內(nèi)容為:11/31/8進(jìn)行time觸發(fā)
INFO-2016/5/24 12:31:08--日志內(nèi)容為:12/31/8進(jìn)行time觸發(fā)
INFO-2016/5/24 13:31:08--日志內(nèi)容為:13/31/8進(jìn)行time觸發(fā)
INFO-2016/5/24 14:31:08--日志內(nèi)容為:14/31/8進(jìn)行time觸發(fā)
INFO-2016/5/24 15:31:08--日志內(nèi)容為:15/31/8進(jìn)行time觸發(fā)
INFO-2016/5/24 16:31:08--日志內(nèi)容為:16/31/8進(jìn)行time觸發(fā)
INFO-2016/5/24 17:31:08--日志內(nèi)容為:17/31/8進(jìn)行time觸發(fā)
INFO-2016/5/24 18:31:08--日志內(nèi)容為:18/31/8進(jìn)行time觸發(fā)
INFO-2016/5/24 19:31:08--日志內(nèi)容為:19/31/8進(jìn)行time觸發(fā)
INFO-2016/5/24 20:31:08--日志內(nèi)容為:20/31/8進(jìn)行time觸發(fā)
INFO-2016/5/24 21:31:08--日志內(nèi)容為:21/31/8進(jìn)行time觸發(fā)
INFO-2016/5/24 22:31:08--日志內(nèi)容為:22/31/8進(jìn)行time觸發(fā)
INFO-2016/5/24 23:31:08--日志內(nèi)容為:23/31/8進(jìn)行time觸發(fā)

實(shí)現(xiàn)代碼:

下載 ftplib.dll 然后項(xiàng)目中參照引用

using FtpLib;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Threading;
 
namespace WindowsService1
{
 public partial class Service1 : ServiceBase
 {
 private int _countFileChangeEvent = 0, _countTimerEvent = 0;
 
 private Thread ThreadDownLoad;
 
 public Service1()
 {
 InitializeComponent();
 }
 //http://blog.csdn.net/hwt0101/article/details/8514291
 //http://www.cnblogs.com/mywebname/articles/1244745.html
 //http://www.cnblogs.com/jzywh/archive/2008/07/23/filesystemwatcher.html
 //http://www.cnblogs.com/hfzsjz/archive/2011/01/07/1929898.html
 /// 
 /// 服務(wù)啟動的操作
 /// 
 /// 
 protected override void OnStart(string[] args)
 {
 try
 {
 EventLog.WriteEntry("監(jiān)控服務(wù)器與本地節(jié)目列表信息線程任務(wù)開始");//在系統(tǒng)事件查看器里的應(yīng)用程序事件里來源的描述 
 WriteInLog("監(jiān)控服務(wù)器與本地節(jié)目列表信息線程任務(wù)開始", false);
 System.Timers.Timer t = new System.Timers.Timer();
 // t.Interval = 60000;
  t.Interval = 60 * 60 * 1000;  
 t.Elapsed += new System.Timers.ElapsedEventHandler(BeginDowLoad);//到達(dá)時間的時候執(zhí)行事件; 
 t.AutoReset = true;//設(shè)置是執(zhí)行一次(false)還是一直執(zhí)行(true); 
 t.Enabled = true;//是否執(zhí)行System.Timers.Timer.Elapsed事件; 
 t.Start();
 }
 catch (Exception ex)
 {
 System.Diagnostics.Trace.Write(ex.Message);
 throw ex;
 }
 }
 ///  
 /// 定時檢查,并執(zhí)行方法 
 ///  
 ///  
 ///  
 public void BeginDowLoad(object source, System.Timers.ElapsedEventArgs e)
 {
 int intMinute = e.SignalTime.Minute;
 int intSecond = e.SignalTime.Second;
 int intHours = e.SignalTime.Hour;
 //設(shè)置 每天的07:30開始執(zhí)行程序
 WriteInLog(intHours+"/"+ intMinute + "/"+ intSecond + "進(jìn)行time觸發(fā)", false);
 if (intHours == 07 ) ///定時設(shè)置,判斷分時秒    && intMinute == 10
 {
 try
 {
  System.Timers.Timer tt = (System.Timers.Timer)source;
  tt.Enabled = false;
  DownLoadTvListInfo();
  tt.Enabled = true;
 }
 catch (Exception err)
 {
  WriteInLog(err.Message, false);
 }
 }
 }
 
 public List listFTPFiles(string FTPAddress, string username, string password)
 {
 List listinfo = new List();
 using (FtpConnection ftp = new FtpConnection(FTPAddress, username, password))
 {
 ftp.Open();
 ftp.Login();
 foreach (var file in ftp.GetFiles("/"))
 {
  listinfo.Add(new ChannelTvListInfo
  {
  TVName = file.Name,
  LastWriteTime = Convert.ToDateTime(file.LastWriteTime).ToString("yyyy/MM/dd HH:mm")
  });
 }
 ftp.Dispose();
 ftp.Close();
 }
 return listinfo;
 }
 /// 
 /// 服務(wù)停止的操作
 /// 
 protected override void OnStop()
 {
 try
 {
 ThreadDownLoad.Abort();
 WriteInLog("監(jiān)控服務(wù)器與本地節(jié)目列表信息線程任務(wù)停止", false);
 System.Diagnostics.Trace.Write("監(jiān)控服務(wù)器與本地節(jié)目列表信息線程任務(wù)停止");
 EventLog.WriteEntry("監(jiān)控服務(wù)器與本地節(jié)目列表信息線程任務(wù)停止");
 }
 catch (Exception ex)
 {
 System.Diagnostics.Trace.Write(ex.Message);
 }
 }
 
 private List lstNewTvInfo, lstOldTvInfo = new List();
 private void DownLoadTvListInfo()
 {
 _countTimerEvent++;
 WriteInLog(string.Format("TimerEvent {0}", _countTimerEvent.ToString("#00")), false);
 lstNewTvInfo = listFTPFiles("222.206.159.xx", "xx", "xx");
 
 WriteInLog(string.Format("TimerEvent {0} :共獲取{1}個節(jié)目列表信息成功。", _countTimerEvent.ToString("#00"),lstNewTvInfo.Count), false);
 lstOldTvInfo = new List();
 
 DirectoryInfo TheFolder = new DirectoryInfo(@"D:\Hello\UpLoadImg\ChannelTvXML");
 foreach (FileInfo NextFile in TheFolder.GetFileSystemInfos())
 {
 lstOldTvInfo.Add(new ChannelTvListInfo { TVName = NextFile.Name, LastWriteTime = NextFile.LastWriteTime.ToString("yyyy/MM/dd HH:mm") });
 }
  Thread.Sleep(60000);
 ThreadDownLoad = new Thread(new ThreadStart(Test));
 ThreadDownLoad.Start();
 
 WriteInLog("服務(wù)器與本地節(jié)目列表信息進(jìn)行對比開始。", false);
 System.Diagnostics.Trace.Write("線程任務(wù)開始");
 }
 
 public void Test()
 {
 try
 {
 var result = lstNewTvInfo.Except(lstOldTvInfo, new ProductComparer()).ToList();
 WriteInLog("得到要更新的節(jié)目列表共"+ result.Count+"個", false);
 if (result.Count > 0)
 {
  foreach (var item in result)
  {
  _countFileChangeEvent++;
  WriteInLog(string.Format("FileEvent {0} :{1}文件重新下載開始。", _countFileChangeEvent.ToString("#00"),
  item.TVName), false);
 
  new FtpHelper().DownloadFtpFile("xx", "xx", "222.206.159.xx", @"D:\Hello\UpLoadImg\ChannelTvXML", item.TVName);
 
  WriteInLog(string.Format("FileEvent {0} :{1}文件內(nèi)容已于{2}進(jìn)行{3}", _countFileChangeEvent.ToString("#00"),
        item.TVName, item.LastWriteTime, "changed并重新下載成功。"), false);
 
  WriteInLog(string.Format("FileEvent {0} :{1}文件下載后的修改時間開始與服務(wù)器修改時間同步開始。", _countFileChangeEvent.ToString("#00"),
 item.TVName), false);
  File.SetLastWriteTime(@"D:\Hello\UpLoadImg\ChannelTvXML\" + item.TVName,
  Convert.ToDateTime(new FtpHelper().GetDateTimestamp("222.206.159.xx", item.TVName, "xx", "quanmeiti").xx("yyyy/MM/dd hh:mm tt")));
 
  WriteInLog(string.Format("FileEvent {0} :{1}文件下載后的修改時間開始與服務(wù)器修改時間同步成功。", _countFileChangeEvent.ToString("#00"),
 item.TVName), false);
 
  }
 }
 else
 {
  WriteInLog("暫無服務(wù)器電視節(jié)目列表更新", false);
 }
 
 }
 catch { }
 Thread.Sleep(60000);
 }
 
 /// 
 /// 寫入文件操作
 /// 
 /// 寫入內(nèi)容
 /// 是否刪除
 private void WriteInLog(string msg, bool IsAutoDelete)
 {
 try
 {
 string logFileName = @"D:\Hello\UpLoadImg\ChannelLog\DownTvList_" + DateTime.Now.ToString("yyyyMMdd") + "_log.txt" + ""; // 文件路徑
 
 FileInfo fileinfo = new FileInfo(logFileName);
 if (IsAutoDelete)
 {
  if (fileinfo.Exists && fileinfo.Length >= 1024)
  {
  fileinfo.Delete();
  }
 }
 using (FileStream fs = fileinfo.OpenWrite())
 {
  StreamWriter sw = new StreamWriter(fs);
  sw.BaseStream.Seek(0, SeekOrigin.End);
  sw.Write("INFO-" + DateTime.Now.ToString() + "--日志內(nèi)容為:" + msg + "\r\n");
  sw.Flush();
  sw.Close();
 }
 }
 catch (Exception ex)
 {
 ex.ToString();
 }
 }
 }
 
}

實(shí)現(xiàn)從FTP下載文件方法

 /// 
 ///從ftp服務(wù)器上下載文件的功能
 /// 
 /// 
 /// 
 /// ftp地址
 /// 
 /// 
 public void DownloadFtpFile(string userId, string pwd, string ftpUrl, string filePath, string fileName)
 {
 FtpWebRequest reqFTP = null;
 FtpWebResponse response = null;
 try
 {
 String onlyFileName = Path.GetFileName(fileName);
 
 string downFileName = filePath + "\\" + onlyFileName;
 string url = "ftp://" + ftpUrl + "/" + fileName;
 if (File.Exists(downFileName))
 {
 DeleteDir(downFileName);
 }
 
 FileStream outputStream = new FileStream(downFileName, FileMode.Create);
 
 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
 reqFTP.Credentials = new NetworkCredential(userId, pwd);
 reqFTP.UseBinary = true;
 reqFTP.UsePassive = true;
 reqFTP.KeepAlive = true;
 reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
 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;
 }
 }

設(shè)置widnwos服務(wù)就不多介紹了。如下圖:

C#開發(fā)windows服務(wù)實(shí)現(xiàn)自動從FTP服務(wù)器下載文件

C#開發(fā)windows服務(wù)實(shí)現(xiàn)自動從FTP服務(wù)器下載文件

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


本文標(biāo)題:C#開發(fā)windows服務(wù)實(shí)現(xiàn)自動從FTP服務(wù)器下載文件
本文鏈接:http://weahome.cn/article/iijcpo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部