public void FindModifiedOrDeletedLocalObjects(String rootFolder, ref List<string> deletedFolders,
ref List<string> deletedFiles, ref List<string> modifiedFiles)
{
// Crawl through all entries in the database, and record the ones that have changed on the filesystem.
// Check for deleted folders.
var folders = database.GetLocalFolders();
foreach (string folder in folders)
{
if (!Directory.Exists(Utils.PathCombine(rootFolder, folder)))
{
deletedFolders.Add(folder);
}
}
var files = database.GetChecksummedFiles();
foreach (ChecksummedFile file in files)
{
// Check for deleted files.
if (File.Exists(Path.Combine(rootFolder, file.RelativePath)))
{
// Check for modified files.
if (file.HasChanged(rootFolder))
{
modifiedFiles.Add(file.RelativePath);
}
}
else
{
deletedFiles.Add(file.RelativePath);
}
}
// Ignore deleted files and folders that are sub-items of a deleted folder.
// Folder removal is done recursively so removing sub-items would be redundant.
foreach (string deletedFolder in new List<string>(deletedFolders)) // Copy the list to avoid modifying it while iterating.
{
// Ignore deleted files contained in the deleted folder.
deletedFiles.RemoveAll(deletedFile => deletedFile.StartsWith(deletedFolder));
// Ignore deleted folders contained in the deleted folder.
deletedFolders.RemoveAll(otherDeletedFolder => Utils.FirstFolderContainsSecond(deletedFolder, otherDeletedFolder));
}
}