public FileSecureDeleteResult FileSecureDelete(string filePath) { FileSecureDeleteResult result = new FileSecureDeleteResult(); result.OriginalPath = filePath; result.StartTime = DateTime.Now; try { if (File.Exists(filePath)) { byte[] wipeBuffer = new byte[512]; RNGCryptoServiceProvider randomData = new RNGCryptoServiceProvider(); File.SetAttributes(filePath, FileAttributes.Normal); FileStream fileToWipeStream = new FileStream(filePath, FileMode.Open); double blocks = Math.Ceiling(new FileInfo(filePath).Length / 512d); for (int i = 0; i < MAX_PASSES; i++) { fileToWipeStream.Position = 0; for (int blocksWritten = 0; blocksWritten < blocks; blocksWritten++) { randomData.GetBytes(wipeBuffer); fileToWipeStream.Write(wipeBuffer, 0, wipeBuffer.Length); } result.WriteItterations++; } fileToWipeStream.SetLength(0); fileToWipeStream.Close(); DateTime dt = new DateTime(2037, 1, 1, 0, 0, 0); File.SetCreationTime(filePath, dt); File.SetLastAccessTime(filePath, dt); File.SetLastWriteTime(filePath, dt); File.SetCreationTimeUtc(filePath, dt); File.SetLastAccessTimeUtc(filePath, dt); File.SetLastWriteTimeUtc(filePath, dt); string newFilePath = filePath; for (int i = 0; i < MAX_PASSES; i++) { string tempPath = Path.GetDirectoryName(newFilePath) + Guid.NewGuid(); File.Move(newFilePath, Path.GetDirectoryName(newFilePath) + tempPath); newFilePath = tempPath; result.RenameItterations++; } File.Delete(newFilePath); if (File.Exists(newFilePath)) { result.DeleteSuccessful = false; result.ErrorMessage = string.Format("File {0} existed after Delete message sent.", newFilePath); } } } catch (Exception ex) { result.DeleteSuccessful = false; result.ErrorMessage = ex.ToString(); result.Error = ex; } result.EndTime = DateTime.Now; return(result); }
public FileSecureDeleteResult FileSecureDelete(string filePath) { FileSecureDeleteResult result = new FileSecureDeleteResult(); result.OriginalPath = filePath; result.StartTime = DateTime.Now; try { if (File.Exists(filePath)) { byte[] wipeBuffer = new byte[512]; RNGCryptoServiceProvider randomData = new RNGCryptoServiceProvider(); File.SetAttributes(filePath, FileAttributes.Normal); FileStream fileToWipeStream = new FileStream(filePath, FileMode.Open); double blocks = Math.Ceiling(new FileInfo(filePath).Length / 512d); for (int i = 0; i < MAX_PASSES; i++) { fileToWipeStream.Position = 0; for (int blocksWritten = 0; blocksWritten < blocks; blocksWritten++) { randomData.GetBytes(wipeBuffer); fileToWipeStream.Write(wipeBuffer, 0, wipeBuffer.Length); } result.WriteItterations++; } fileToWipeStream.SetLength(0); fileToWipeStream.Close(); DateTime dt = new DateTime(2037, 1, 1, 0, 0, 0); File.SetCreationTime(filePath, dt); File.SetLastAccessTime(filePath, dt); File.SetLastWriteTime(filePath, dt); File.SetCreationTimeUtc(filePath, dt); File.SetLastAccessTimeUtc(filePath, dt); File.SetLastWriteTimeUtc(filePath, dt); string newFilePath = filePath; for (int i = 0; i < MAX_PASSES; i++) { string tempPath = Path.GetDirectoryName(newFilePath) + Guid.NewGuid(); File.Move(newFilePath, Path.GetDirectoryName(newFilePath) + tempPath); newFilePath = tempPath; result.RenameItterations++; } File.Delete(newFilePath); if (File.Exists(newFilePath)) { result.DeleteSuccessful = false; result.ErrorMessage = string.Format("File {0} existed after Delete message sent.", newFilePath); } } } catch (Exception ex) { result.DeleteSuccessful = false; result.ErrorMessage = ex.ToString(); result.Error = ex; } result.EndTime = DateTime.Now; return result; }