Create basic backup file rotation functions and direcories.
This commit is contained in:
parent
362b3a60a3
commit
22552ce1a9
@ -1010,6 +1010,68 @@ namespace EduNetworkBuilder
|
||||
return OFD;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Move a file out of the way, making a rotating backup at the same time.
|
||||
/// </summary>
|
||||
/// <param name="SourceFileWithDir">A source filename with a directory</param>
|
||||
/// <param name="DestDir">The directory where to put the file</param>
|
||||
/// <param name="rotation">The number of rotation backups to make</param>
|
||||
public static void MoveFileWithRotation(string SourceFileWithDir, string DestDir, int rotation)
|
||||
{
|
||||
if (!File.Exists(SourceFileWithDir)) return; //we do not rotate if the source does not exist
|
||||
if (!Directory.Exists(DestDir))
|
||||
Directory.CreateDirectory(DestDir);
|
||||
//Rotate the old file first, then move the new one over.
|
||||
string dest_file = Path.Combine(DestDir, Path.GetFileName(SourceFileWithDir));
|
||||
RotateFile(dest_file, rotation);
|
||||
File.Move(SourceFileWithDir, dest_file);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Move a file out of the way, making a rotating backup at the same time. backup to appdata
|
||||
/// </summary>
|
||||
/// <param name="SourceFileWithDir">A source filename with a directory</param>
|
||||
/// <param name="rotation">The number of rotation backups to make</param>
|
||||
public static void MoveFileWithRotation(string SourceFileWithDir, int rotation)
|
||||
{
|
||||
string StandardDest = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "EduNetworkBuilder");
|
||||
MoveFileWithRotation(SourceFileWithDir, StandardDest, rotation);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Given a file, rotate it with the specified number of versions.
|
||||
/// </summary>
|
||||
/// <param name="filename"></param>
|
||||
/// <param name="count"></param>
|
||||
public static void RotateFile(string filename, int count)
|
||||
{
|
||||
if (count < 1) return;
|
||||
string currentfile = GenFilenameWithInt(filename, count);
|
||||
string rotatefile;
|
||||
if (File.Exists(currentfile)) File.Delete(currentfile); //The last rotation gets deleted
|
||||
for(int i=count -1; i >= 1; i--)
|
||||
{
|
||||
currentfile = GenFilenameWithInt(filename, i);
|
||||
rotatefile = GenFilenameWithInt(filename, i + 1);
|
||||
if (File.Exists(currentfile))
|
||||
File.Move(currentfile, rotatefile);
|
||||
}
|
||||
//The final case is when there is no version number on the file.
|
||||
currentfile = filename;
|
||||
rotatefile = GenFilenameWithInt(filename, 1);
|
||||
if (File.Exists(currentfile))
|
||||
File.Move(currentfile, rotatefile);
|
||||
}
|
||||
|
||||
private static string GenFilenameWithInt(string filename, int version)
|
||||
{
|
||||
string FileOnly = Path.GetFileNameWithoutExtension(filename);
|
||||
string FileWithInt = FileOnly + "-" + version.ToString("00") + Path.GetExtension(filename);
|
||||
string Combined = Path.Combine(Path.GetDirectoryName(filename), FileWithInt);
|
||||
return Combined;
|
||||
}
|
||||
|
||||
public static void NotImplimentedMessage()
|
||||
{
|
||||
MessageBox.Show(Translate("NB_NotImplimented"));
|
||||
|
Loading…
Reference in New Issue
Block a user