92 lines
3.3 KiB
C#
92 lines
3.3 KiB
C#
using CommonLibrary;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
|
|
namespace Mitria_Minecraft_Launcher
|
|
{
|
|
public class AuditFile
|
|
{
|
|
private string GetFileHash(FileInfo fileInfo)
|
|
{
|
|
using (MD5 md5 = MD5.Create())
|
|
{
|
|
using (Stream stream = fileInfo.OpenRead())
|
|
{
|
|
byte[] hashCode = md5.ComputeHash(stream);
|
|
StringBuilder hashStringBuilder = new StringBuilder();
|
|
foreach (byte b in hashCode)
|
|
{
|
|
hashStringBuilder.AppendFormat("{0:x2}", b);
|
|
}
|
|
return hashStringBuilder.ToString();
|
|
}
|
|
}
|
|
}
|
|
|
|
public List<FileDetail> GetLocalFileList(List<string> directorys)
|
|
{
|
|
List<DirectoryInfo> directoryInfos = new List<DirectoryInfo>();
|
|
foreach (string directory in directorys)
|
|
{
|
|
System.IO.DirectoryInfo directoryInfo = new DirectoryInfo(CommonLibrary.Extensions.PathCombineW(Settings.UserLauncherConfig.GameDirectory,Settings.NowProfile.ServerName, directory));
|
|
directoryInfos.Add(directoryInfo);
|
|
}
|
|
return GetLocalFileList(directoryInfos);
|
|
}
|
|
|
|
public List<FileDetail> GetLocalFileList(List<DirectoryInfo> directorys)
|
|
{
|
|
List<FileDetail> resultFiles = new List<FileDetail>();
|
|
List<FileInfo> files = new List<FileInfo>();
|
|
foreach (var directory in directorys)
|
|
{
|
|
if (!directory.Exists)
|
|
{
|
|
directory.Create();
|
|
}
|
|
files.AddRange(directory.GetFiles("*.*", SearchOption.TopDirectoryOnly).ToArray());
|
|
|
|
}
|
|
foreach (var file in files)
|
|
{
|
|
FileDetail fileDetail = new FileDetail();
|
|
fileDetail.Directory = file.DirectoryName.Replace(CommonLibrary.Extensions.PathCombineW(Settings.UserLauncherConfig.GameDirectory, Settings.NowProfile.ServerName) + "\\", "").Replace("\\", "/");
|
|
fileDetail.FileName = file.Name;
|
|
fileDetail.FileSize = file.Length;
|
|
fileDetail.HashCode = GetFileHash(file);
|
|
|
|
resultFiles.Add(fileDetail);
|
|
}
|
|
return resultFiles;
|
|
}
|
|
|
|
public List<FileDetail> GetRemoveFiles(List<FileDetail> oldFiles, List<FileDetail> newFiles)
|
|
{
|
|
List<FileDetail> removeFiles = new List<FileDetail>();
|
|
foreach (FileDetail oldFile in oldFiles)
|
|
{
|
|
if (!newFiles.Contains(oldFile))
|
|
{
|
|
removeFiles.Add(oldFile);
|
|
}
|
|
}
|
|
return removeFiles;
|
|
}
|
|
|
|
public List<FileDetail> GetNeedFiles(List<FileDetail> oldFiles, List<FileDetail> newFiles)
|
|
{
|
|
List<FileDetail> needFiles = new List<FileDetail>();
|
|
foreach (FileDetail newFile in newFiles)
|
|
{
|
|
if (!oldFiles.Contains(newFile))
|
|
{
|
|
needFiles.Add(newFile);
|
|
}
|
|
}
|
|
return needFiles;
|
|
}
|
|
}
|
|
} |