开发目的:
用于游戏开发热更新中对于游戏文件的版本比对
使用.net core (vs2019)
class Program
{
static string currentVersion = "1.0";
static void Main(string[] args)
{
Console.WriteLine("Start");
string path = System.Environment.CurrentDirectory + @"\xxupdate";
Console.WriteLine(path);
//读取本地所有文件
List<string> fileList = GetDicFiles(path);
//生成对应md5
List<string> configList = new List<string>();
foreach (var file in fileList)
{
FileStream fs = new FileStream(Environment.CurrentDirectory + "/" + file, FileMode.Open);
string md5 = GenerateMD5(fs);
string configstr = file + "," + md5;
Console.WriteLine(configstr);
configList.Add(configstr);
fs.Close();
}
string configPath = Environment.CurrentDirectory + @"\UpdateConfig.csv";
File.Delete(configPath);
//写入配置文件
StreamWriter sw = new System.IO.StreamWriter(configPath, true);
sw.WriteLine("v," + currentVersion);
foreach (var cstr in configList)
{
sw.WriteLine(cstr);// 直接追加文件末尾,换行
}
sw.Close();
Console.WriteLine("完成!");
Console.ReadLine();
}
//获取所有文件名
static List<string> GetDicFiles(string path)
{
List<string> nameList = new List<string>();
DirectoryInfo dir = new DirectoryInfo(path);
FileInfo[] fileArray = dir.GetFiles();
string oldpath = Environment.CurrentDirectory + "\\";
foreach (var file in fileArray)
{
string configPath = file.FullName;
nameList.Add(configPath.Replace(oldpath, ""));
}
DirectoryInfo[] dirs = dir.GetDirectories();
foreach (var childDic in dirs)
{
nameList.AddRange(GetDicFiles(childDic.FullName));
}
return nameList;
}
//md5
public static string GenerateMD5(Stream inputStream)
{
using (MD5 mi = MD5.Create())
{
//开始加密
byte[] newBuffer = mi.ComputeHash(inputStream);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < newBuffer.Length; i++)
{
sb.Append(newBuffer[i].ToString("x2"));
}
return sb.ToString();
}
}
输出:
代码很简单,使用说明如下:
1.在运行目录下 建一个 xxupdate文件夹
2.然后将需要更新文件放进去
3.执行exe
4.会生成对应的csv文件(path,md5)
5.第一行会有一个大版本号,用于强制更新