Esempio n. 1
0
        /// <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();
            }
        }
Esempio n. 2
0
 private void RemoveItem(RecycleBinEntry entry)
 {
     if (recycleFolder.FileExists(entry.Filename))
     {
         recycleFolder.DeleteFile(entry.Filename);
     }
     entryTable.Remove(entry);
     SaveEntryTable();
     OnStateChanged();
     return;
 }
Esempio n. 3
0
 /// <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);
 }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
        /// <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();
            }
        }
Esempio n. 6
0
        /// <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);
        }
Esempio n. 7
0
 public void Remove(RecycleBinEntry entry)
 {
     InnerList.Remove(entry);
     OnListChanged(new ListChangedEventArgs(ListChangedType.ItemDeleted, -1));
 }
Esempio n. 8
0
        public void Add(RecycleBinEntry entry)
        {
            int index = InnerList.Add(entry);

            OnListChanged(new ListChangedEventArgs(ListChangedType.ItemAdded, index));
        }