/// <summary> /// Adds the folder located at the specified path, and all child folders/files that it contains, to the recycle bin. /// </summary> public void AddFolder(string path) { if (linkedLibrary.FolderExists(path)) { // Generate a file name for this deleted item. string recycleBinFolderName = CreateRandomFilename(); // Create a new archive to contain the folder and it's child items. Archive folderArchive = new Archive(recycleFolder.RootPath + "\\" + recycleBinFolderName, Archive.ArchiveMode.Create); string[] files = linkedLibrary.GetFileList(path, "*", true); if (files.Length < 1) { Output.Write(OutputTypes.Information, "The folder '" + path + "' does not contain any files, and will simply be deleted from the project folder."); } // Copy all of the child files to the archive. foreach (string file in files) { byte[] fileData = linkedLibrary.ReadFile(file); folderArchive.AddFile(file, fileData); } folderArchive.Close(); RecycleBinEntry entry = new RecycleBinEntry(); entry.Filename = recycleBinFolderName; entry.OriginalPath = path; entry.EntryType = RecycleBinEntryType.Folder; entry.DeletedTimeStamp = DateTime.Now; entryTable.Add(entry); SaveEntryTable(); OnStateChanged(); } }
private void RemoveItem(RecycleBinEntry entry) { if (recycleFolder.FileExists(entry.Filename)) { recycleFolder.DeleteFile(entry.Filename); } entryTable.Remove(entry); SaveEntryTable(); OnStateChanged(); return; }
/// <summary> /// Restores the specified file to the project. /// </summary> public bool RestoreFile(RecycleBinEntry entry) { if (linkedLibrary.FileExists(entry.OriginalPath)) { if (OnBeforeOverwriteFile()) { return(false); // Return if the operation was cancelled via that event. } } byte[] file = recycleFolder.ReadFile(entry.Filename); linkedLibrary.AddFile(entry.OriginalPath, file); recycleFolder.DeleteFile(entry.Filename); entryTable.Remove(entry); SaveEntryTable(); OnStateChanged(); return(true); }
protected void LoadEntryTable() { entryTable = new RecycleBinEntryCollection(); string filename = sourceFolder + "\\entries.list"; if (!File.Exists(filename)) { return; } FileStream inputFile = new FileStream(filename, FileMode.Open); GZipStream zipStream = new GZipStream(inputFile, CompressionMode.Decompress); MemoryStream decompressedData = new MemoryStream(); byte[] buffer = new byte[100]; while (true) { int bytesRead = zipStream.Read(buffer, 0, 100); if (bytesRead == 0) { break; } decompressedData.Write(buffer, 0, bytesRead); } inputFile.Close(); string xml = Encoding.ASCII.GetString(decompressedData.ToArray()); XmlDocument document = new XmlDocument(); document.LoadXml(xml); XmlNodeList entryNodes = document.SelectNodes("//entry"); foreach (XmlNode entryNode in entryNodes) { RecycleBinEntry entry = new RecycleBinEntry(); entry.Filename = entryNode.Attributes["filename"].Value; entry.OriginalPath = entryNode.Attributes["originalpath"].Value; entry.DeletedTimeStamp = DateTime.Parse(entryNode.Attributes["deletedtimestamp"].Value); entry.EntryType = EnumReader.Parse <RecycleBinEntryType>(entryNode.Attributes["entrytype"].Value); entryTable.Add(entry); } }
/// <summary> /// Reads the specified file from the linked library and adds it to the Recycle Bin. /// </summary> public void AddFile(string path) { if (linkedLibrary.FileExists(path)) { // Generate a file name for this deleted item. string recycleBinFilename = CreateRandomFilename(); byte[] deletedFile = linkedLibrary.ReadFile(path); recycleFolder.AddFile(recycleBinFilename, deletedFile); RecycleBinEntry entry = new RecycleBinEntry(); entry.Filename = recycleBinFilename; entry.OriginalPath = path; entry.EntryType = RecycleBinEntryType.File; entry.DeletedTimeStamp = DateTime.Now; entryTable.Add(entry); SaveEntryTable(); OnStateChanged(); } }
/// <summary> /// Restores the specified file to the project. /// </summary> public bool RestoreFolder(RecycleBinEntry entry) { if (linkedLibrary.FolderExists(entry.OriginalPath)) { if (OnBeforeOverwriteFolder()) { return(false); // Return if the operation was cancelled via that event. } } Archive folderArchive = new Archive(recycleFolder.RootPath + "\\" + entry.Filename, Archive.ArchiveMode.Open); string[] files = folderArchive.GetFileList("", "*", true); foreach (string file in files) { byte[] fileData = folderArchive.ReadFile(file); linkedLibrary.AddFile(file, fileData); } folderArchive.Close(); recycleFolder.DeleteFile(entry.Filename); entryTable.Remove(entry); SaveEntryTable(); OnStateChanged(); return(true); }
public void Remove(RecycleBinEntry entry) { InnerList.Remove(entry); OnListChanged(new ListChangedEventArgs(ListChangedType.ItemDeleted, -1)); }
public void Add(RecycleBinEntry entry) { int index = InnerList.Add(entry); OnListChanged(new ListChangedEventArgs(ListChangedType.ItemAdded, index)); }