ok so i messed up with the FileInfo, because it was already there and I just lazily used it. But lets try handling this with the sophistication it calls for
This commit is contained in:
parent
c04d813b77
commit
3c96e9d434
|
@ -3790,26 +3790,9 @@ namespace BizHawk.Client.EmuHawk
|
||||||
file.Directory.Create();
|
file.Directory.Create();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Make backup first
|
// Make backup first
|
||||||
if (Global.Config.BackupSavestates && file.Exists)
|
if (Global.Config.BackupSavestates)
|
||||||
{
|
BizHawk.Common.Util.TryMoveBackupFile(path, path + ".bak");
|
||||||
var backup = path + ".bak";
|
|
||||||
var backupFile = new FileInfo(backup);
|
|
||||||
if (backupFile.Exists)
|
|
||||||
{
|
|
||||||
backupFile.Delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
File.Move(path, backup);
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
// Eat it, this will happen rarely and the user will rarely need the file, so the odds of simply not making the backup is very unlikely
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SaveState(path, quickSlotName, false);
|
SaveState(path, quickSlotName, false);
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,51 @@ namespace BizHawk.Common
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tries to moves `pathWant` out of the way to `pathBackup`, delaying as needed to accomodate filesystem being sucky.
|
||||||
|
/// `pathWant` might not be removed after all, in case it's snagged by something.
|
||||||
|
/// </summary>
|
||||||
|
public static bool TryMoveBackupFile(string pathWant, string pathBackup)
|
||||||
|
{
|
||||||
|
//If the path we want is available we dont actually have to make a backup
|
||||||
|
if (!File.Exists(pathWant))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
//delete any existing backup
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (File.Exists(pathBackup))
|
||||||
|
File.Delete(pathBackup);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
//just give up on the whole thing in case of exceptions. pathWant will get overwritten by the caller.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//deletes are asynchronous, need to wait for it to be gone
|
||||||
|
while (File.Exists(pathBackup))
|
||||||
|
System.Threading.Thread.Sleep(10);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//actually move pathWant out of the way to pathBackup now that pathBackup is free
|
||||||
|
File.Move(pathWant, pathBackup);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// Eat it, this will happen rarely and the user will rarely need the file, so the odds of simply not making the backup is very unlikely
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//hmm these might be asynchronous too
|
||||||
|
//wait for the move to complete, at least enough for pathWant to be cleared up
|
||||||
|
while (File.Exists(pathWant))
|
||||||
|
System.Threading.Thread.Sleep(10);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public static bool IsPowerOfTwo(int x)
|
public static bool IsPowerOfTwo(int x)
|
||||||
{
|
{
|
||||||
if (x == 0 || x == 1)
|
if (x == 0 || x == 1)
|
||||||
|
|
Loading…
Reference in New Issue