public FileWhiteList() { _whiteListedFiles = new SortedList <string, string>(); //Ensure whitelist file exists if (File.Exists(WHITE_LIST_PATH) == false) { //File doesn't exist. Create it File.Create(WHITE_LIST_PATH).Close(); } string[] files = File.ReadAllLines(WHITE_LIST_PATH); Console.WriteLine("Loading " + files.Length + " whitelisted files"); //Clean file //The file is rewritten every time to ensure the files still exist File.WriteAllText(WHITE_LIST_PATH, string.Empty); for (int i = 0; i < files.Length; i++) { //If the item is succsfully added append it to the file //Make temp item DeletableItem item = DeletableItem.Make(files[i], 0); AddToWhiteList(item); } }
/// <summary> /// Searches for all old files that are ready to be deleted /// </summary> /// <param name="delayedStart">If an item should be deleted now, what time should it be delayed to</param> public void SearchForFiles() { //Search through all directories for (int i = 0; i < _config.SearchedDirectories.Count; i++) { SearchedDirectory searchedDirectory = _config.SearchedDirectories[i]; int deletionTime = _config.SearchedDirectories[i].FileAgeLimit; //Ensure directory exists if (Directory.Exists(searchedDirectory.Path) == false) { continue; } //Find all files in directory DeletableItem[] files = Directory.GetFiles(searchedDirectory.Path, "*").Select(s => DeletableItem.Make(s, deletionTime)).ToArray(); //Search for directories as well DeletableItem[] directories = Directory.GetDirectories(searchedDirectory.Path, "*", SearchOption.TopDirectoryOnly).Select(s => DeletableItem.Make(s, deletionTime)).ToArray(); //Combine files and directories into one array DeletableItem[] itemsInDirectory = new DeletableItem[files.Length + directories.Length]; files.CopyTo(itemsInDirectory, 0); directories.CopyTo(itemsInDirectory, files.Length); for (int j = 0; j < itemsInDirectory.Length; j++) { DeletableItem item = itemsInDirectory[j]; //Ensure file is not whitelisted or already is in cleaner if (_whiteList.IsInWhiteList(item) || _itemsForDeletion.Contains(item)) { continue; } DateTime timeToDelete = item.DeleteTime; Console.WriteLine(item.Path + " is " + (timeToDelete - DateTime.UtcNow).TotalMinutes + " minutes off, deleted: " + item.ShouldBeDeleted()); _itemsForDeletion.Add(item); } } }