/// <summary>
 /// Checks and backs up the specified directory.
 /// </summary>
 /// <param name="backupDirectory">Directory where backups will be stored.</param>
 /// <param name="mainDirectory">The directory being backed up.</param>
 /// <param name="feedbackRecipient">FeedbackRecipient for reporting backup progress and errors.</param>
 /// <param name="relativePaths">Collection of files marked for backup. Use GetRelativePaths to obtain this from a directory
 /// intended to be used as a reference for backup.</param>
 public void ValidateBackup(string backupDirectory, string mainDirectory, IFeedbackRecipient feedbackRecipient,
     params string[] relativePaths)
 {
     if (!Directory.Exists(backupDirectory))
     {
         Directory.CreateDirectory(backupDirectory);
         feedbackRecipient.OnInfoReport("Warning: Backup directory did not exist; Creating a new backup directory.");
     }
     string[] filesInBackup = Directory.GetFiles(backupDirectory, "*", SearchOption.AllDirectories);
     for (int i = 0; i < relativePaths.Count(); i++)
     {
         if (!File.Exists(backupDirectory + relativePaths[i]) &&
             !File.Exists(mainDirectory + "\\" + relativePaths[i]))
         {
             feedbackRecipient.OnInfoReport("Warning: File (" + mainDirectory + "\\" + relativePaths[i] +
                 ") does not exist. Skipping");
         }
         else if (!File.Exists(backupDirectory + relativePaths[i]))
         {
             string filePath = backupDirectory + relativePaths[i];
             string fileDirectory = new FileInfo(backupDirectory + relativePaths[i]).DirectoryName;
             if (!Directory.Exists(fileDirectory))
                 Directory.CreateDirectory(fileDirectory);
             File.Copy(mainDirectory + "\\" + relativePaths[i],
                 backupDirectory + relativePaths[i]);
         }
         feedbackRecipient.OnProgress(backupDirectory + relativePaths[i], "Validating backup file: ", relativePaths.Count());
     }
 }
 /// <summary>
 /// Gets a collection of file paths under a directory, relative to the directory specified.
 /// </summary>
 /// <param name="directoryFiles">The files inside of the directory.</param>
 /// <param name="directory">The path to the directory.</param>
 /// <param name="feedbackRecipient">IFeedbackRecipient for reporting progress and errors.</param>
 /// <returns>A collection of file paths under and relative to directory.</returns>
 public string[] GetRelativePaths(string[] directoryFiles, string directory, IFeedbackRecipient feedbackRecipient)
 {
     string[] paths = new string[directoryFiles.Length];
     for (int i = 0; i < paths.Length; i++)
     {
         string searchable = directoryFiles[i].ToUpper();
         string relativePath = "\\" + searchable.Split(new string[] { directory.ToUpper() }, StringSplitOptions.None)[1];
         paths[i] = relativePath;
         if (feedbackRecipient != null)
             feedbackRecipient.OnProgress(directoryFiles[i], "Getting relative path of file: ", paths.Length);
     }
     return paths;
 }
Example #3
0
 private string[] GetRelativePaths(string[] resDirectoryFiles, string directoryName, IFeedbackRecipient feedbackRecipient = null)
 {
     directoryName = directoryName.ToUpper();
     string[] paths = new string[resDirectoryFiles.Length];
     for (int i = 0; i < paths.Length; i++)
     {
         string searchable = resDirectoryFiles[i].ToUpper();
         string relativePath = "\\" + searchable.Split(new string[] { "\\" + directoryName + "\\" },
             StringSplitOptions.None)[1];
         paths[i] = relativePath;
         feedbackReporter.ReportProgress(resDirectoryFiles[i], "Getting relative path of file: ", paths.Length);
     }
     return paths;
 }
 /// <summary>
 /// Copies the files in a directory and all of it's subdirectories to a specified location.
 /// </summary>
 /// <param name="readDirectory">The directory to copy the files from.</param>
 /// <param name="writeDirectory">The directory to copy the files to.</param>
 /// <param name="relativePaths">Collection of files marked for backup. Use GetRelativePaths to obtain this from
 /// a directory inteded to be used as backup.</param>
 /// <param name="feedbackRecipient">IFeedbackRecipient for reporting progress and errors.</param>
 public void CopyFiles(string readDirectory, string writeDirectory, string[] relativePaths,
     IFeedbackRecipient feedbackRecipient)
 {
     for (int i = 0; i < relativePaths.Count(); i++)
     {
         string readPath = readDirectory + relativePaths[i];
         string writePath = writeDirectory + relativePaths[i];
         if (!File.Exists(readPath))
         {
             feedbackRecipient.OnInfoReport("Warning: File (" + readPath + ") Does not exist. Skipping");
             continue;
         }
         if (!File.Exists(writePath))
         {
             feedbackRecipient.OnInfoReport("Warning: File (" + writePath + ") Does not exist. Skipping");
             continue;
         }
         try
         {
             File.Copy(readPath, writePath, true);
         }
         catch (IOException)
         {
             feedbackRecipient.OnInfoReport("Error: File (" + relativePaths[i] + ") is in use by another process. Skipping");
             continue;
         }
         catch (UnauthorizedAccessException ex)
         {
             feedbackRecipient.OnInfoReport(ex.ToString());
         }
         catch (Exception ex)
         {
             feedbackRecipient.OnInfoReport(ex.ToString());
         }
         feedbackRecipient.OnProgress(writePath, "Overwriting file: ", relativePaths.Count());
     }
 }