This code from codeproject may be a good starting point.
Eraser has been around for years, you could call out to it by using System.Diagnostics.Process, or at least review the algorithm there.
More Related Contents:
- Why is JsonRequestBehavior needed?
- Requested registry access is not allowed
- MD5 hash with salt for keeping password in DB in C#
- In .NET/C# test if process has administrative privileges
- Does using parameterized SqlCommand make my program immune to SQL injection?
- Best way to store encryption keys in .NET C#
- How to convert SecureString to System.String?
- Best way to restrict access by IP address?
- Are static members of a generic class tied to the specific instance?
- How do I find out what directory my console app is running in?
- Explanation of Func
- How do I get .NET to garbage collect aggressively?
- Subscribe to INotifyPropertyChanged for nested (child) objects
- How do I minimize a WinForms application to the notification area?
- Monitor child processes of a process
- Does Func.BeginInvoke use the ThreadPool?
- .net connection pooling
- Encryption compatible between Android and C#
- Get the property name used in a Lambda Expression in .NET 3.5
- Repository Pattern, POCO, and Business Entities
- How to insert a Symbol (Pound, Euro, Copyright) into a Textbox
- List the IP Address of all computers connected to a single LAN
- Writing a Header using CsvHelper? C#
- Does “foreach” cause repeated Linq execution?
- How to copy a row of values from a 2D array into a 1D array?
- Is it necessary to dispose System.Timers.Timer if you use one in your application?
- C#: Default implementation for == and != operators for objects
- IDictionary contravariance?
- Does VLC media player have a C# interface? [closed]
- How to check if process is not responding?