Пример #1
0
        private void PromptUserToSaveFiles(IEnumerable items)
        {
            FolderBrowserDialog folderDialog = new FolderBrowserDialog();

            if (folderDialog.ShowDialog() == DialogResult.OK)
            {
                // Check that the drive isn't the same as the drive being copied from.
                if (folderDialog.SelectedPath[0] != _scanner.DiskName[0] ||
                    MessageBox.Show("ВНИМАНИЕ: Вы собираетесь сохранить этот файл на том же диске, " +
                                    "с которого пытаетесь восстановить. Это может привести к сбою восстановления " +
                                    "и перезаписи ваших данных навсегда! Вы уверены, что хотите продолжить?", "ВНИМАНИЕ!",
                                    MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                {
                    List <IFileSystemNode> nodes = new List <IFileSystemNode>();
                    foreach (ListViewItem item in items)
                    {
                        INodeMetadata metadata = item.Tag as INodeMetadata;
                        if (metadata != null)
                        {
                            nodes.Add(metadata.GetFileSystemNode());
                        }
                    }
                    SaveMultipleFiles(nodes, folderDialog.SelectedPath);
                }
            }
        }
Пример #2
0
        private void PromptUserToSaveFile(INodeMetadata metadata)
        {
            if (metadata != null)
            {
                SaveFileDialog saveFileDialog = new SaveFileDialog();
                saveFileDialog.OverwritePrompt  = true;
                saveFileDialog.InitialDirectory = Environment.ExpandEnvironmentVariables("%SystemDrive");
                saveFileDialog.FileName         = metadata.Name;
                saveFileDialog.Filter           = "Все файлы|*.*";
                saveFileDialog.Title            = "Выбрать расположение";

                if (saveFileDialog.ShowDialog() == DialogResult.OK)
                {
                    // Check that the drive isn't the same as the drive being copied from.
                    if (saveFileDialog.FileName[0] != _scanner.DiskName[0] ||
                        MessageBox.Show("ВНИМАНИЕ: Вы собираетесь сохранить этот файл на том же диске, " +
                                        "с которого пытаетесь восстановить. Это может привести к сбою восстановления " +
                                        "и перезаписи ваших данных навсегда! Вы уверены, что хотите продолжить?", "ВНИМАНИЕ!",
                                        MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                    {
                        IFileSystemNode node = metadata.GetFileSystemNode();
                        SaveSingleFile(node, saveFileDialog.FileName);
                    }
                }
            }
        }
Пример #3
0
 private void fileView_MouseClick(object sender, MouseEventArgs e)
 {
     if (e.Button == MouseButtons.Right)
     {
         if (fileView.SelectedItems.Count == 1)
         {
             INodeMetadata metadata = fileView.SelectedItems[0].Tag as INodeMetadata;
             if (metadata != null)
             {
                 ContextMenu menu        = new ContextMenu();
                 MenuItem    recoverFile = new MenuItem("Восстановить файл...", new EventHandler(delegate(object o, EventArgs ea)
                 {
                     PromptUserToSaveFile(metadata);
                 }));
                 recoverFile.Enabled = !_scanning;
                 menu.MenuItems.Add(recoverFile);
                 menu.Show(fileView, e.Location);
             }
         }
         else if (fileView.SelectedItems.Count > 1)
         {
             // We need slightly different behaviour to save multiple files.
             ContextMenu menu         = new ContextMenu();
             MenuItem    recoverFiles = new MenuItem("Восстановить файлы...", new EventHandler(delegate(object o, EventArgs ea)
             {
                 PromptUserToSaveFiles(fileView.SelectedItems);
             }));
             recoverFiles.Enabled = !_scanning;
             menu.MenuItems.Add(recoverFiles);
             menu.Show(fileView, e.Location);
         }
     }
 }
Пример #4
0
        /// <summary>
        /// Constructs a ListViewItem from an underlying INodeMetadata model.
        /// </summary>
        /// <param name="metadata">The metadata to create a view for.</param>
        /// <returns>The constructed ListViewItem.</returns>
        private ListViewItem MakeListItem(INodeMetadata metadata)
        {
            IFileSystemNode node = metadata.GetFileSystemNode();
            string          ext  = "";

            try {
                ext = Path.GetExtension(metadata.Name);
            } catch (ArgumentException exc) { Console.WriteLine(exc); }
            if (!_extensionMap.ContainsKey(ext))
            {
                _extensionMap[ext] = new ExtensionInfo(ext);
            }
            ExtensionInfo extInfo = _extensionMap[ext];

            if (extInfo.Image != null && !extInfo.Image.Size.IsEmpty)
            {
                if (!_imageList.Images.ContainsKey(ext))
                {
                    _imageList.Images.Add(ext, extInfo.Image);
                }
            }
            ListViewItem lvi = new ListViewItem(new string[] {
                metadata.Name,
                extInfo.FriendlyName,
                Util.FileSizeToHumanReadableString(node.Size),
                metadata.LastModified.ToString(CultureInfo.CurrentCulture),
                node.Path,
                _recoveryDescriptions[metadata.ChanceOfRecovery]
            });

            lvi.BackColor = _recoveryColors[metadata.ChanceOfRecovery];

            lvi.ImageKey = ext;
            lvi.Tag      = metadata;
            return(lvi);
        }
Пример #5
0
        private bool CheckFile(INodeMetadata metadata)
        {
            if (cbDeleted.Checked) {
                if (!metadata.Deleted) {
                    return false;
                }
            }

            IFileSystemNode node = metadata.GetFileSystemNode();
            String name = node.Name;

            if (cbAltStreams.Checked) {
                if (!(node is HiddenDataStreamFileNTFS)) {
                    return false;
                }
                name = name.Replace("(Hidden Streams)", "");
            }

            File file = node as File;
            if (file == null) {
                return false;
            }
            return FileTypes.IsFileType(file, selectedType);
        }