private void BtnWipe_Click(object sender, RoutedEventArgs e) { Stopwatch sp = Stopwatch.StartNew(); UpdateMainProgressBarDelegate updateMainPBar = new UpdateMainProgressBarDelegate(mainProgressBar.SetValue); UpdateProgressBarDelegate updateProgressBarDelegate = new UpdateProgressBarDelegate(progressBar.SetValue); _fileCount = files.Count; int fileIndex = 1; for (int i = _fileCount - 1; i >= 0; i--) { if (WipeFile(files[i])) { //progressBar.Value = Convert.ToInt32((double)fileIndex / _fileCount * 100); Dispatcher.Invoke(updateProgressBarDelegate, DispatcherPriority.Background, new object[] { RangeBase.ValueProperty, (double)fileIndex / _fileCount * 100 }); files.RemoveAt(i); fileIndex++; } FileListView.ItemsSource = files; resultMsg.Text = $"{files.Count} files ready for shredding"; } if (folders.Count > 0) { int folderCount = folders.Count; for (int i = folders.Count - 1; i >= 0; i--) { Directory.Delete(folders[i]); folders.RemoveAt(i); FolderListView.ItemsSource = folders; } } Dispatcher.Invoke(updateProgressBarDelegate, DispatcherPriority.Background, new object[] { RangeBase.ValueProperty, 100.0 }); Dispatcher.Invoke(updateMainPBar, DispatcherPriority.Background, new object[] { RangeBase.ValueProperty, 100.0 }); //for (int i = (int)progressBar.Minimum; i <= (int)progressBar.Maximum; i++) //{ // Dispatcher.Invoke(updateProgressBarDelegate, DispatcherPriority.Background, new object[] { RangeBase.ValueProperty, Convert.ToDouble(i) }); //} resultMsg.Text = $"Files successfully shreded"; Logging.LogMessage(LoggingLevel.Info, resultMsg.Text); sp.Stop(); completedIn.Text = $"{sp.Elapsed.TotalMilliseconds.ToString("F3")} ms"; Logging.LogMessage(LoggingLevel.Info, completedIn.Text); }
private bool WipeFile(FileModel file) { UpdateMainProgressBarDelegate updateMainPBar = new UpdateMainProgressBarDelegate(mainProgressBar.SetValue); try { int timesToWrite = 10; File.SetAttributes(file.Path, FileAttributes.Normal); double sectors = Math.Ceiling(new FileInfo(file.Path).Length / 512.0); byte[] dummyBuffer = new byte[512]; RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); for (int i = 0; i <= 3; i++) { byte[] infile = File.ReadAllBytes(file.Path); AES.SetDefaultKey(FileControls.GenerateRandomKey(25)); if (infile.Length > 0) { FileStream inputStream = new FileStream(file.Path, FileMode.Open); byte[] data = AES.Encrypt(infile); inputStream.SetLength(0); inputStream.Seek(0, SeekOrigin.Begin); inputStream.Write(data, 0, data.Length); for (int passIndex = 0; passIndex < timesToWrite; passIndex++) { inputStream.Position = 0; for (int sectorIndex = 0; sectorIndex < sectors; sectorIndex++) { rng.GetBytes(dummyBuffer); inputStream.Write(dummyBuffer, 0, dummyBuffer.Length); } Dispatcher.Invoke(updateMainPBar, DispatcherPriority.Background, new object[] { RangeBase.ValueProperty, (double)passIndex / timesToWrite * 100 }); } //inputStream.SetLength(0); inputStream.Close(); } } FileStream instream = new FileStream(file.Path, FileMode.Open); instream.SetLength(0); instream.Close(); DateTime dt = new DateTime(2037, 1, 1, 0, 0, 0); File.SetCreationTime(file.Path, dt); File.SetLastAccessTime(file.Path, dt); File.SetLastWriteTime(file.Path, dt); File.SetCreationTimeUtc(file.Path, dt); File.SetLastAccessTimeUtc(file.Path, dt); File.SetLastWriteTimeUtc(file.Path, dt); File.Delete(file.Path); AES.UnsetDefaultKey(); return(true); } catch (Exception) { return(false); } finally { if (folders.Count > 0) { } } }