/// <summary> /// Performs a global backup action, copying all files in the SavesDirectory to the BackupDirectory. /// </summary> public static void Backup() { if (Busy) { ToConsole("Could not perform backup action, the service is busy."); return; } Busy = true; DateTime now = DateTime.UtcNow; ToConsole(String.Empty); ToConsole("Backup action started..."); TryCatch( () => { DateTime expire = DateTime.UtcNow.Subtract(TimeSpan.FromDays(3.0)); Parallel.ForEach( BackupDirectory.EnumerateDirectories(), dir => TryCatch( () => { if (dir.CreationTimeUtc < expire) { dir.Delete(true); } })); }); TryCatch( () => { var target = IOUtility.EnsureDirectory( BackupDirectory + "/" + DateTime.Now.ToSimpleString("D d M y - t@h-m@"), true); Parallel.ForEach( SavesDirectory.EnumerateDirectories(), dir => TryCatch( () => dir.CopyDirectory(IOUtility.EnsureDirectory(dir.FullName.Replace(SavesDirectory.FullName, target.FullName))))); }); if (OnBackup != null) { TryCatch(OnBackup, ToConsole); } Busy = false; double time = (DateTime.UtcNow - now).TotalSeconds; ToConsole("Backup action completed in {0:F2} second{1}", time, (time != 1) ? "s" : String.Empty); }
/// <summary> /// Performs a global backup action, copying all files in the SavesDirectory to the BackupDirectory. /// </summary> public static void Backup() { if (Busy) { ToConsole("Could not perform backup action, the service is busy."); return; } Busy = true; var now = DateTime.UtcNow; try { ToConsole(String.Empty); ToConsole("Backup action started..."); if (BackupExpireAge > TimeSpan.Zero) { ToConsole("Backup Expire Age: {0}", BackupExpireAge); lock (IOLock) { BackupDirectory.EmptyDirectory(BackupExpireAge); } } lock (IOLock) { SavesDirectory.CopyDirectory( IOUtility.EnsureDirectory(BackupDirectory + "/" + DateTime.Now.ToSimpleString("D d M y"), true)); } InvokeByPriority(OnBackup); } finally { Busy = false; } var time = (DateTime.UtcNow - now).TotalSeconds; ToConsole("Backup action completed in {0:F2} second{1}", time, (time != 1) ? "s" : String.Empty); }
/// <summary> /// Performs a global backup action, copying all files in the SavesDirectory to the BackupDirectory. /// </summary> public static void Backup() { if (Busy) { ToConsole("Could not perform backup action, the service is busy."); return; } Busy = true; DateTime now = DateTime.UtcNow; ToConsole(String.Empty); ToConsole("Backup action started..."); SavesDirectory.CopyDirectory( IOUtility.EnsureDirectory(BackupDirectory + "/" + DateTime.Now.ToSimpleString("D d M y"), true)); if (_ExpireThread != null) { TryCatch(_ExpireThread.Abort); _ExpireThread = null; } _ExpireThread = new Thread(FlushExpired) { Name = "Backup Expire Flush", Priority = ThreadPriority.BelowNormal }; _ExpireThread.Start(); if (OnBackup != null) { TryCatch(OnBackup, ToConsole); } Busy = false; double time = (DateTime.UtcNow - now).TotalSeconds; ToConsole("Backup action completed in {0:F2} second{1}", time, (time != 1) ? "s" : String.Empty); }