代碼如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
namespace CYSoft.CommonLib
{
/// <summary>
/// 自動升級
/// </summary>
public class AutoUpdate
{
#region 字段
public string m_FileIdField = "FileID";//暫時以文件名爲唯一 "FileID";
public string FileIDField
{
set { m_FileIdField = value; }
get { return m_FileIdField; }
}
public string m_FileInfoField = "FileInfo";
public string FileInfoField
{
set { m_FileInfoField = value; }
get { return m_FileInfoField; }
}
public string m_FileNameField = "FileName";
public string FileNameField
{
set { m_FileNameField = value; }
get { return m_FileNameField; }
}
public string m_FileUrlField = "Url";
public string FileUrlField
{
set { m_FileUrlField = value; }
get { return m_FileUrlField; }
}
public string m_FileSavePathField = "SavePath";
public string FileSavePathField
{
set { m_FileSavePathField = value; }
get { return m_FileSavePathField; }
}
public string m_FileVersionField = "Version";
public string FileVersionField
{
set { m_FileVersionField = value; }
get { return m_FileVersionField; }
}
public string m_FileSizeField = "Size";
public string FileSizeField
{
set { m_FileSizeField = value; }
get { return m_FileSizeField; }
}
public string m_FilePercentageField = "Percentage";
public string FilePercentageField
{
set { m_FilePercentageField = value; }
get { return m_FilePercentageField; }
}
#endregion
#region 委託 事件
/// <summary>
/// 下載過程進度事件
/// </summary>
/// <param name="e"></param>
public delegate void ProgressChangedEventHandler(string fileId, int percentage);
public event ProgressChangedEventHandler ProgressChangedEvent;
/// <summary>
/// 下載完成
/// </summary>
/// <param name="fileInfo"></param>
/// <param name="e"></param>
public delegate void DownloadFileCompletedEventHandler();
public event DownloadFileCompletedEventHandler DownloadFileCompletedEvent;
/// <summary>
/// 一個文件下載完成
/// </summary>
/// <param name="fileInfo"></param>
/// <param name="e"></param>
public delegate void DownloadOneFileCompletedEventHandler(string fileId);
public event DownloadOneFileCompletedEventHandler DownloadOneFileCompletedEvent;
#endregion
#region 變量 屬性
/// <summary>
/// 本地已經升級文件數據集
/// </summary>
private DataSet m_LocalConfigDs = null;
/// <summary>
/// 服務器升級文件數據集
/// </summary>
private DataSet m_UpdateDs = null;
WebDownloadFile m_WebDownloadFile = null;
/// <summary>
/// 是否需要升級
/// </summary>
public bool NeedUpdate
{
get
{
return m_UpdateDs.Tables[0].Rows.Count > 0 ? true : false;
}
}
#endregion
#region 構造函數
public AutoUpdate(DataSet updateDs, DataSet localConfigDs)
{
m_UpdateDs = updateDs;
m_LocalConfigDs = localConfigDs;
//LoadLocalConfigData(localConfigFile);
InitDownloadData();
}
#endregion
#region 函數方法
public void CheckUpdateData()
{
DataTable dt = m_UpdateDs.Tables[0].Copy();
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow dr = dt.Rows[i];
string sql = m_FileIdField + "='" + dr[m_FileIdField].ToString() + "'";
DataRow[] drs = m_LocalConfigDs.Tables[0].Select(sql);
if (drs.Length > 0)
{
if (drs[0][m_FileVersionField].ToString() == dr[m_FileVersionField].ToString())
{
sql = m_FileIdField + "='" + dr[m_FileIdField].ToString() + "'";
DataRow[] tmpdrs = m_UpdateDs.Tables[0].Select(sql);
if (tmpdrs.Length > 0)
tmpdrs[0].Delete();
}
}
}
m_UpdateDs.AcceptChanges();
}
/// <summary>
/// 初始化下載文件數據 (如果使用此方法xml格式必須符合webService方法裏的xml格式)
/// </summary>
/// <param name="xml"></param>
private void InitDownloadData()
{
try
{
m_WebDownloadFile = new WebDownloadFile();
m_WebDownloadFile.DownLoadFiles = new List<WebDownloadFile.DownLoadFileInfo>();
m_WebDownloadFile.ProgressChangedEvent += new WebDownloadFile.ProgressChangedEventHandler(m_WebDownloadFile_ProgressChangedEvent);
m_WebDownloadFile.DownloadFileCompletedEvent += new WebDownloadFile.DownloadFileCompletedEventHandler(m_WebDownloadFile_DownloadFileCompletedEvent);
m_WebDownloadFile.DownloadOneFileCompletedEvent += new WebDownloadFile.DownloadOneFileCompletedEventHandler(m_WebDownloadFile_DownloadOneFileCompletedEvent);
CheckUpdateData();
foreach (DataRow dr in m_UpdateDs.Tables[0].Rows)
{
WebDownloadFile.DownLoadFileInfo info = new WebDownloadFile.DownLoadFileInfo();
info.fileID = dr[m_FileIdField].ToString();
info.fileName = dr[m_FileNameField].ToString();
info.fileWebUrl = dr[m_FileUrlField].ToString();
info.fileSavePath = dr[m_FileSavePathField].ToString();
m_WebDownloadFile.DownLoadFiles.Add(info);
}
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
#region 事件
void m_WebDownloadFile_DownloadOneFileCompletedEvent(WebDownloadFile.DownLoadFileInfo fileInfo)
{
if (DownloadOneFileCompletedEvent != null)
DownloadOneFileCompletedEvent(fileInfo.fileID);
}
public void StartUpdate()
{
m_WebDownloadFile.StartDownload();
}
void m_WebDownloadFile_ProgressChangedEvent(WebDownloadFile.DownLoadFileInfo fileInfo, int percentage)
{
if (ProgressChangedEvent != null)
ProgressChangedEvent(fileInfo.fileID, percentage);
}
void m_WebDownloadFile_DownloadFileCompletedEvent()
{
if (DownloadFileCompletedEvent != null)
DownloadFileCompletedEvent();
}
#endregion
}
}
注:WebDownloadFile 相關內容可以在我BLOG裏找