CLIPA/IPA/Patcher/BackupManager.cs
2017-01-20 20:29:51 +01:00

73 lines
2 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace IPA.Patcher
{
public class BackupManager
{
public static void MakeBackup(string file)
{
File.Copy(file, GetBackupName(file));
}
private static string GetBackupName(string file)
{
string backup = file + ".Original";
if (File.Exists(backup))
{
int i = 1;
string backupBase = backup;
while (File.Exists(backup))
{
backup = backupBase + i++;
}
}
return backup;
}
public static string FindLatestBackup(string file)
{
var directory = Path.GetDirectoryName(file);
var filename = Path.GetFileName(file);
var regex = new Regex(String.Format(@"^{0}\.Original\d*$", Regex.Escape(filename)));
var extractNumRegex = new Regex(@"\d+$");
string latestFile = null;
int latestNum = -1;
foreach(var f in Directory.GetFiles(directory))
{
if(regex.IsMatch(Path.GetFileName(f)))
{
var match = extractNumRegex.Match(f);
int number = match.Success ? int.Parse(match.Value) : 0;
if(number > latestNum)
{
latestNum = number;
latestFile = f;
}
}
}
return latestFile;
}
public static bool Restore(string file)
{
var backup = FindLatestBackup(file);
if(backup != null)
{
File.Delete(file);
File.Move(backup, file);
return true;
}
return false;
}
}
}