- First Update
This commit is contained in:
91
Mitria_Minecraft_Launcher/AuditFile.cs
Normal file
91
Mitria_Minecraft_Launcher/AuditFile.cs
Normal file
@@ -0,0 +1,91 @@
|
||||
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, 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.AllDirectories).ToArray());
|
||||
}
|
||||
foreach (var file in files)
|
||||
{
|
||||
FileDetail fileDetail = new FileDetail();
|
||||
fileDetail.Directory = file.DirectoryName.Replace(Settings.UserLauncherConfig.GameDirectory + "\\", "").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;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user