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); } } }
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); } } } }
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); } } }
/// <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); }
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); }