AIMS/AutoUpdateTool/FormUp.cs
2022-08-23 21:12:59 +08:00

215 lines
7.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
using System.Xml.Linq;
namespace AutoUpdateTool
{
public partial class FormUp : System.Windows.Forms.Form
{
public FormUp()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string filepath = System.Windows.Forms.Application.StartupPath + @"\AIMS.xml";
if (!File.Exists(filepath))
{
MessageBox.Show("AIMS.xml不存在", "系统提示");
return;
}
string connstr = GetConnStr(filepath);
//if (!dbHelper.CanOpen)
//{
// MessageBox.Show("数据库连接配置不正确请检查ConnectionString配置。");
// return;
//}
nowVersion.Text = GetVersion();
upVersion.Text = nowVersion.Text;
}
private void btnLoad_Click(object sender, EventArgs e)
{
string localXmlFile = Application.StartupPath + "\\UpdateList.xml";
if (!File.Exists(localXmlFile))
{
MessageBox.Show("UpdateList.xml不存在", "系统提示");
return;
}
SetVersion(upVersion.Text);
UpdateListXML(upVersion.Text);
MessageBox.Show("生成成功 可以替换ftp了。", "系统提示");
this.Close();
}
private string GetConnStr(string filepath)
{
XmlOperator xmlOperator = new XmlOperator(filepath);
return xmlOperator.GetNode("ConnectionString")[0].ToString();
}
/// <summary>
/// 修改程序版本号
/// </summary>
/// <param name="Version"></param>
public void SetVersion(string Version)
{
string strSql = "update Version set VerName='" + Version + "'";
DBHelper.ExecNonQuery(strSql);
}
/// <summary>
/// 获取程序版本号
/// </summary>
public string GetVersion()
{
string strSql = "select * from Version";
return DBHelper.ExecuteScalar(strSql).ToString();
}
public List<ftpFileDirectory> nowListFileDirectory;
public void UpdateListXML(string vs)
{
try
{
string localXmlFile = Application.StartupPath + "\\UpdateList.xml";
if (!File.Exists(localXmlFile)) return;
//读xml版本号
XElement xe = XElement.Load(localXmlFile);
xe.Element("Version").Value = vs.ToString();
nowListFileDirectory = new List<ftpFileDirectory>();
downNow(Application.StartupPath);
IEnumerable<XElement> element = from ex in xe.Elements("Files")
select ex;
///删除指定的元素,并保存
if (element.Count() > 0)
{
element.Remove();
}
XElement record = new XElement("Files");
foreach (var item in nowListFileDirectory)
{
if (item.filename.Contains("AutoUpdate")) continue;
XElement file = new XElement(
new XElement("File",
new XAttribute("Name", item.filename),
new XAttribute("MD5Hash", item.MD5Hash == null ? "" : item.MD5Hash)));
record.Add(file);
}
xe.Add(record);
xe.Save(localXmlFile);
}
catch (Exception)
{
return;
}
}
/// <summary>
/// 递归实现获取ftp目录下所有文件及文件夹以及文件夹内的子文件
/// </summary>
/// <param name="ftpads">FTP路径</param>
/// <param name="downloadDir">保存的本地路径</param>
/// <param name="username">用户名</param>
/// <param name="password">密码</param>
public void downNow(string ftpads)
{
try
{
DirectoryInfo theFolder = new DirectoryInfo(ftpads);
printAllFile(theFolder);
}
catch (Exception ex)
{
MessageBox.Show("获取目录失败+downftp" + ex.ToString());
Environment.Exit(0);
}
}
public void printAllFile(DirectoryInfo di)
{
FileInfo[] fiArray = di.GetFiles();
DirectoryInfo[] diArray = di.GetDirectories();
foreach (FileInfo NextFile in fiArray)
{
var fd = new ftpFileDirectory();
fd.ftpPath = NextFile.DirectoryName + "\\" + NextFile.Name.ToString();
fd.filename = NextFile.Name.ToString();
fd.filelength = NextFile.Length;
fd.MD5Hash = GetMD5HashFromFile(fd.ftpPath);
nowListFileDirectory.Add(fd);
}
foreach (DirectoryInfo inst in diArray)
{
printAllFile(inst);
}
}
/// <summary>
/// 获取文件的MD5码
/// </summary>
/// <param name="fileName">传入的文件名(含路径及后缀名)</param>
/// <returns></returns>
public static string GetMD5HashFromFile(string fileName)
{
try
{
FileStream file = new FileStream(fileName, System.IO.FileMode.Open);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] retVal = md5.ComputeHash(file);
file.Close();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < retVal.Length; i++)
{
sb.Append(retVal[i].ToString("x2"));
}
return sb.ToString();
}
catch (Exception)
{
return "";
//throw new Exception("GetMD5HashFromFile() fail,error:" + ex.Message);
}
}
}
/// <summary>
/// 记录要下载的文件路径及下载到本地的路径
/// </summary>
public struct ftpFileDirectory
{
/// <summary>
/// 要下载的文件路径
/// </summary>
public string ftpPath;
/// <summary>
/// 下载到本地的路径
/// </summary>
public string localPath;
/// <summary>
/// 文件名
/// </summary>
public string filename;
/// <summary>
/// 文件大小
/// </summary>
public long filelength;
/// <summary>
/// MD5码
/// </summary>
public string MD5Hash;
}
}