├── .gitignore
├── .travis.yml
├── ClassDiagram1.cd
├── Helper.cs
├── LICENSE
├── ListViewEx.cs
├── MainForm.Designer.cs
├── MainForm.cs
├── MainForm.resx
├── Program.cs
├── Properties
├── AssemblyInfo.cs
├── Resources.Designer.cs
├── Resources.resx
├── Settings.Designer.cs
└── Settings.settings
├── README.md
├── app.config
├── bin
└── Release
│ └── csharp_File_Shredder.exe
├── csharp_File_Shredder.csproj
├── csharp_File_Shredder.csproj.user
├── csharp_File_Shredder.sln
├── hex.ico
├── notes
├── old code.txt
└── todo_wip.txt
├── obj
└── x86
│ └── Release
│ ├── DesignTimeResolveAssemblyReferences.cache
│ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ ├── csharp_File_Shredder.MainForm.resources
│ ├── csharp_File_Shredder.Properties.Resources.resources
│ ├── csharp_File_Shredder.csproj.FileListAbsolute.txt
│ ├── csharp_File_Shredder.csproj.GenerateResource.Cache
│ ├── csharp_File_Shredder.exe
│ └── csharp_File_Shredder.pdb
└── readme
└── gui.gif
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.suo
8 | *.user
9 | *.userosscache
10 | *.sln.docstates
11 |
12 | # User-specific files (MonoDevelop/Xamarin Studio)
13 | *.userprefs
14 |
15 | # Build results
16 | [Dd]ebug/
17 | [Dd]ebugPublic/
18 | [Rr]elease/
19 | [Rr]eleases/
20 | x64/
21 | x86/
22 | bld/
23 | [Bb]in/
24 | [Oo]bj/
25 | [Ll]og/
26 |
27 | # Visual Studio 2015 cache/options directory
28 | .vs/
29 | # Uncomment if you have tasks that create the project's static files in wwwroot
30 | #wwwroot/
31 |
32 | # MSTest test Results
33 | [Tt]est[Rr]esult*/
34 | [Bb]uild[Ll]og.*
35 |
36 | # NUNIT
37 | *.VisualState.xml
38 | TestResult.xml
39 |
40 | # Build Results of an ATL Project
41 | [Dd]ebugPS/
42 | [Rr]eleasePS/
43 | dlldata.c
44 |
45 | # Benchmark Results
46 | BenchmarkDotNet.Artifacts/
47 |
48 | # .NET Core
49 | project.lock.json
50 | project.fragment.lock.json
51 | artifacts/
52 | **/Properties/launchSettings.json
53 |
54 | *_i.c
55 | *_p.c
56 | *_i.h
57 | *.ilk
58 | *.meta
59 | *.obj
60 | *.pch
61 | *.pdb
62 | *.pgc
63 | *.pgd
64 | *.rsp
65 | *.sbr
66 | *.tlb
67 | *.tli
68 | *.tlh
69 | *.tmp
70 | *.tmp_proj
71 | *.log
72 | *.vspscc
73 | *.vssscc
74 | .builds
75 | *.pidb
76 | *.svclog
77 | *.scc
78 |
79 | # Chutzpah Test files
80 | _Chutzpah*
81 |
82 | # Visual C++ cache files
83 | ipch/
84 | *.aps
85 | *.ncb
86 | *.opendb
87 | *.opensdf
88 | *.sdf
89 | *.cachefile
90 | *.VC.db
91 | *.VC.VC.opendb
92 |
93 | # Visual Studio profiler
94 | *.psess
95 | *.vsp
96 | *.vspx
97 | *.sap
98 |
99 | # Visual Studio Trace Files
100 | *.e2e
101 |
102 | # TFS 2012 Local Workspace
103 | $tf/
104 |
105 | # Guidance Automation Toolkit
106 | *.gpState
107 |
108 | # ReSharper is a .NET coding add-in
109 | _ReSharper*/
110 | *.[Rr]e[Ss]harper
111 | *.DotSettings.user
112 |
113 | # JustCode is a .NET coding add-in
114 | .JustCode
115 |
116 | # TeamCity is a build add-in
117 | _TeamCity*
118 |
119 | # DotCover is a Code Coverage Tool
120 | *.dotCover
121 |
122 | # AxoCover is a Code Coverage Tool
123 | .axoCover/*
124 | !.axoCover/settings.json
125 |
126 | # Visual Studio code coverage results
127 | *.coverage
128 | *.coveragexml
129 |
130 | # NCrunch
131 | _NCrunch_*
132 | .*crunch*.local.xml
133 | nCrunchTemp_*
134 |
135 | # MightyMoose
136 | *.mm.*
137 | AutoTest.Net/
138 |
139 | # Web workbench (sass)
140 | .sass-cache/
141 |
142 | # Installshield output folder
143 | [Ee]xpress/
144 |
145 | # DocProject is a documentation generator add-in
146 | DocProject/buildhelp/
147 | DocProject/Help/*.HxT
148 | DocProject/Help/*.HxC
149 | DocProject/Help/*.hhc
150 | DocProject/Help/*.hhk
151 | DocProject/Help/*.hhp
152 | DocProject/Help/Html2
153 | DocProject/Help/html
154 |
155 | # Click-Once directory
156 | publish/
157 |
158 | # Publish Web Output
159 | *.[Pp]ublish.xml
160 | *.azurePubxml
161 | # Note: Comment the next line if you want to checkin your web deploy settings,
162 | # but database connection strings (with potential passwords) will be unencrypted
163 | *.pubxml
164 | *.publishproj
165 |
166 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
167 | # checkin your Azure Web App publish settings, but sensitive information contained
168 | # in these scripts will be unencrypted
169 | PublishScripts/
170 |
171 | # NuGet Packages
172 | *.nupkg
173 | # The packages folder can be ignored because of Package Restore
174 | **/[Pp]ackages/*
175 | # except build/, which is used as an MSBuild target.
176 | !**/[Pp]ackages/build/
177 | # Uncomment if necessary however generally it will be regenerated when needed
178 | #!**/[Pp]ackages/repositories.config
179 | # NuGet v3's project.json files produces more ignorable files
180 | *.nuget.props
181 | *.nuget.targets
182 |
183 | # Microsoft Azure Build Output
184 | csx/
185 | *.build.csdef
186 |
187 | # Microsoft Azure Emulator
188 | ecf/
189 | rcf/
190 |
191 | # Windows Store app package directories and files
192 | AppPackages/
193 | BundleArtifacts/
194 | Package.StoreAssociation.xml
195 | _pkginfo.txt
196 | *.appx
197 |
198 | # Visual Studio cache files
199 | # files ending in .cache can be ignored
200 | *.[Cc]ache
201 | # but keep track of directories ending in .cache
202 | !*.[Cc]ache/
203 |
204 | # Others
205 | ClientBin/
206 | ~$*
207 | *~
208 | *.dbmdl
209 | *.dbproj.schemaview
210 | *.jfm
211 | *.pfx
212 | *.publishsettings
213 | orleans.codegen.cs
214 |
215 | # Since there are multiple workflows, uncomment next line to ignore bower_components
216 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
217 | #bower_components/
218 |
219 | # RIA/Silverlight projects
220 | Generated_Code/
221 |
222 | # Backup & report files from converting an old project file
223 | # to a newer Visual Studio version. Backup files are not needed,
224 | # because we have git ;-)
225 | _UpgradeReport_Files/
226 | Backup*/
227 | UpgradeLog*.XML
228 | UpgradeLog*.htm
229 |
230 | # SQL Server files
231 | *.mdf
232 | *.ldf
233 | *.ndf
234 |
235 | # Business Intelligence projects
236 | *.rdl.data
237 | *.bim.layout
238 | *.bim_*.settings
239 |
240 | # Microsoft Fakes
241 | FakesAssemblies/
242 |
243 | # GhostDoc plugin setting file
244 | *.GhostDoc.xml
245 |
246 | # Node.js Tools for Visual Studio
247 | .ntvs_analysis.dat
248 | node_modules/
249 |
250 | # Typescript v1 declaration files
251 | typings/
252 |
253 | # Visual Studio 6 build log
254 | *.plg
255 |
256 | # Visual Studio 6 workspace options file
257 | *.opt
258 |
259 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
260 | *.vbw
261 |
262 | # Visual Studio LightSwitch build output
263 | **/*.HTMLClient/GeneratedArtifacts
264 | **/*.DesktopClient/GeneratedArtifacts
265 | **/*.DesktopClient/ModelManifest.xml
266 | **/*.Server/GeneratedArtifacts
267 | **/*.Server/ModelManifest.xml
268 | _Pvt_Extensions
269 |
270 | # Paket dependency manager
271 | .paket/paket.exe
272 | paket-files/
273 |
274 | # FAKE - F# Make
275 | .fake/
276 |
277 | # JetBrains Rider
278 | .idea/
279 | *.sln.iml
280 |
281 | # CodeRush
282 | .cr/
283 |
284 | # Python Tools for Visual Studio (PTVS)
285 | __pycache__/
286 | *.pyc
287 |
288 | # Cake - Uncomment if you are using it
289 | # tools/**
290 | # !tools/packages.config
291 |
292 | # Tabs Studio
293 | *.tss
294 |
295 | # Telerik's JustMock configuration file
296 | *.jmconfig
297 |
298 | # BizTalk build output
299 | *.btp.cs
300 | *.btm.cs
301 | *.odx.cs
302 | *.xsd.cs
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: csharp
2 | solution: csharp_File_Shredder.sln
--------------------------------------------------------------------------------
/ClassDiagram1.cd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | AHjAgQhIASLEIQgWAECBRACPCEDiEKECBCEIQAAdIig=
7 | MainForm.cs
8 |
9 |
10 |
11 |
12 |
13 | BACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAA=
14 | MainForm.cs
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/Helper.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Collections;
6 | using System.IO;
7 | using System.Windows.Forms;
8 |
9 | namespace csharp_File_Shredder
10 | {
11 | static class Helper
12 | {
13 | public static ArrayList GetListViewElements(ListView lv, int i)
14 | {
15 | ArrayList ret = new ArrayList();
16 |
17 | foreach (ListViewItem lvi in lv.Items) {
18 | if (i < lvi.SubItems.Count) {
19 | ret.Add(lvi.SubItems[i].Text);
20 | }
21 | }
22 | return ret;
23 | }
24 |
25 | public static double GetFileSizeInBytesFromFileList(ArrayList files)
26 | {
27 | double return_value = 0;
28 |
29 | if (files.Count > 0) {
30 | foreach (string file in files) {
31 | FileInfo fileInfo = new FileInfo(file);
32 | return_value += fileInfo.Length;
33 | }
34 | }
35 | return return_value;
36 | }
37 |
38 | public static string FormatedFileSize(string fileName)
39 | {
40 | try {
41 | FileInfo fileInfo = new FileInfo(fileName);
42 | double fileSize = (fileInfo.Length / 1024.0);
43 |
44 | if (fileSize < 1024) {
45 | return fileSize.ToString("F01") + " kB";
46 | } else {
47 | double tempFileSize = fileSize / 1024.0;
48 |
49 | if (tempFileSize < 1024) {
50 | return tempFileSize.ToString("F01") + " MB";
51 | } else {
52 | tempFileSize /= 1024;
53 | return tempFileSize.ToString("F01") + " GB";
54 | }
55 | }
56 | } catch (System.Exception ex) {
57 | MessageBox.Show(ex.Message);
58 | }
59 | return "0kB";
60 | }
61 |
62 | public static bool IsDirectory(string path)
63 | {
64 | if (Directory.Exists(path)) {
65 | return true;
66 | }
67 | return false;
68 | }
69 |
70 | public static string FormatKiloBytes(double size)
71 | {
72 | if (size < 1024) {
73 | return size.ToString("F01") + " kB";
74 | } else {
75 | double tempSize = size / 1024.0;
76 |
77 | if (tempSize < 1024) {
78 | return tempSize.ToString("F01") + " MB";
79 | } else {
80 | tempSize /= 1024;
81 | return tempSize.ToString("F01") + " GB";
82 | }
83 | }
84 | }
85 |
86 | public static string FormatMiliseconds(double miliseconds)
87 | {
88 | if (miliseconds < 1000) {
89 | return miliseconds.ToString("F01") + " ms";
90 | } else {
91 | double tempMiliseconds = miliseconds / 1000;
92 |
93 | if (tempMiliseconds < 60) {
94 | return tempMiliseconds.ToString("F01") + " s";
95 | } else {
96 | tempMiliseconds /= 60;
97 |
98 | if (tempMiliseconds < 60) {
99 | return tempMiliseconds.ToString("F01") + " m";
100 | } else {
101 | tempMiliseconds /= 60;
102 | return tempMiliseconds.ToString("F01") + " h";
103 | }
104 | }
105 | }
106 | }
107 |
108 | public static string FormatMBps(double MBps)
109 | {
110 | return MBps.ToString("F01") + " MBps";
111 | }
112 |
113 | public static ArrayList GetFileNamesInDirectory(String Path, bool Recursive, bool FullPath)
114 | {
115 | ArrayList files = new ArrayList();
116 | DirectoryInfo directory = new DirectoryInfo(Path);
117 |
118 | if (directory.Exists) {
119 | foreach (FileInfo file in directory.GetFiles()) {
120 | if (FullPath) {
121 | if (!files.Contains(Path + "\\" + file.Name)) {
122 | files.Add(Path + "\\" + file.Name);
123 | } else if (!files.Contains(file.Name)) {
124 | files.Add(file.Name);
125 | }
126 | }
127 | }
128 |
129 | if (Recursive) {
130 | foreach (DirectoryInfo subDirectory in directory.GetDirectories()) {
131 | foreach (Object o in GetFileNamesInDirectory(Path + "\\" + subDirectory.Name, true, FullPath)) {
132 | if (!files.Contains(o.ToString())) {
133 | files.Add(o.ToString());
134 | }
135 | }
136 | }
137 | }
138 | }
139 | return files;
140 | }
141 | }
142 | }
143 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Gellin
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/ListViewEx.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections;
3 | using System.ComponentModel;
4 | using System.Drawing;
5 | using System.Windows.Forms;
6 | using System.Runtime.InteropServices;
7 |
8 | namespace csharp_File_Shredder
9 | {
10 | // ORIGINAL CREDIT TO - I MAY HAVE MODIFIED IT ?
11 | ///
12 | /// Zusammenfassung für ListViewEx.
13 | ///
14 |
15 | public class ListViewEx : ListView
16 | {
17 | #region Interop-Defines
18 |
19 | [DllImport("user32.dll")]
20 | private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wPar, IntPtr lPar);
21 |
22 | // ListView messages
23 | private const int LVM_FIRST = 0x1000;
24 | private const int LVM_GETCOLUMNORDERARRAY = (LVM_FIRST + 59);
25 |
26 | #endregion
27 |
28 | private struct EmbeddedControl : IEquatable
29 | {
30 | public Control Control;
31 | public int Column;
32 | public int Row;
33 | public DockStyle Dock;
34 | public ListViewItem Item;
35 |
36 | public bool Equals(EmbeddedControl obj) => (obj is EmbeddedControl embededControl) && embededControl.Control == Control;
37 | }
38 |
39 | private ArrayList _embeddedControls = new ArrayList();
40 |
41 | protected int[] GetColumnOrder()
42 | {
43 | IntPtr lPar = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(int)) * Columns.Count);
44 |
45 | IntPtr res = SendMessage(Handle, LVM_GETCOLUMNORDERARRAY, new IntPtr(Columns.Count), lPar);
46 | if (res.ToInt32() == 0) // Something went wrong
47 | {
48 | Marshal.FreeHGlobal(lPar);
49 | return null;
50 | }
51 |
52 | int[] order = new int[Columns.Count];
53 | Marshal.Copy(lPar, order, 0, Columns.Count);
54 |
55 | Marshal.FreeHGlobal(lPar);
56 |
57 | return order;
58 | }
59 |
60 | protected Rectangle GetSubItemBounds(ListViewItem Item, int SubItem)
61 | {
62 | Rectangle subItemRect = Rectangle.Empty;
63 |
64 | if (Item == null) {
65 | throw new ArgumentNullException("Item");
66 | }
67 |
68 | int[] order = GetColumnOrder();
69 | if (order == null) {
70 | return subItemRect;
71 | }
72 |
73 | if (SubItem >= order.Length) {
74 | throw new ArgumentOutOfRangeException("SubItem " + SubItem + " out of range");
75 | }
76 |
77 | // Retrieve the bounds of the entire ListViewItem (all subitems)
78 | Rectangle lviBounds = Item.GetBounds(ItemBoundsPortion.Entire);
79 | int subItemX = lviBounds.Left;
80 |
81 | // Calculate the X position of the SubItem.
82 | // Because the columns can be reordered we have to use Columns[order[i]] instead of Columns[i] !
83 | ColumnHeader col;
84 | int i;
85 | for (i = 0; i < order.Length; i++) {
86 | col = this.Columns[order[i]];
87 | if (col.Index == SubItem) {
88 | break;
89 | }
90 |
91 | subItemX += col.Width;
92 | }
93 |
94 | subItemRect = new Rectangle(subItemX, lviBounds.Top, this.Columns[order[i]].Width, lviBounds.Height);
95 |
96 | return subItemRect;
97 | }
98 |
99 | public void AddEmbeddedControl(Control c, int col, int row)
100 | {
101 | AddEmbeddedControl(c, col, row, DockStyle.Fill);
102 | }
103 |
104 | public void AddEmbeddedControl(Control c, int col, int row, DockStyle dock)
105 | {
106 | if (c == null) {
107 | throw new ArgumentNullException();
108 | }
109 |
110 | if (col >= Columns.Count || row >= Items.Count) {
111 | throw new ArgumentOutOfRangeException();
112 | }
113 |
114 | EmbeddedControl ec;
115 | ec.Control = c;
116 | ec.Column = col;
117 | ec.Row = row;
118 | ec.Dock = dock;
119 | ec.Item = Items[row];
120 |
121 | _embeddedControls.Add(ec);
122 |
123 | this.Controls.Add(c);
124 | }
125 |
126 | public void RemoveFirst()
127 | {
128 | RemoveItem(0);
129 | }
130 |
131 | public void RemoveItem(int index)
132 | {
133 | EmbeddedControl ec = (EmbeddedControl)_embeddedControls[index];
134 |
135 | if (ec.Control == null || ec.Item == null) {
136 | throw new ArgumentNullException();
137 | }
138 |
139 | this.Controls.Remove(ec.Control);
140 | _embeddedControls.Remove((object)ec);
141 | ec.Item.Remove();
142 | }
143 |
144 | public void RemoveAllControls()
145 | {
146 | foreach (EmbeddedControl ec in _embeddedControls) {
147 | this.Controls.Remove(ec.Control);
148 | ec.Item.Remove();
149 | }
150 | _embeddedControls.RemoveRange(0, _embeddedControls.Count);
151 | }
152 |
153 | public Control GetEmbeddedControl(int col, int row)
154 | {
155 | foreach (EmbeddedControl ec in _embeddedControls) {
156 | if (ec.Row == row && ec.Column == col) {
157 | return ec.Control;
158 | }
159 | }
160 | return null;
161 | }
162 |
163 | [DefaultValue(View.LargeIcon)]
164 | public new View View
165 | {
166 | get {
167 | return base.View;
168 | }
169 | set {
170 | // Embedded controls are rendered only when we're in Details mode
171 | foreach (EmbeddedControl ec in _embeddedControls) {
172 | ec.Control.Visible = (value == View.Details);
173 | }
174 |
175 | base.View = value;
176 | }
177 | }
178 |
179 | protected override void WndProc(ref Message m)
180 | {
181 | const int WM_PAINT = 0x000F;
182 | if (m.Msg == WM_PAINT) {
183 | if (View != View.Details) {
184 | return;
185 | }
186 |
187 | // Calculate the position of all embedded controls
188 | foreach (EmbeddedControl ec in _embeddedControls) {
189 | Rectangle rc = this.GetSubItemBounds(ec.Item, ec.Column);
190 |
191 | if ((this.HeaderStyle != ColumnHeaderStyle.None) &&
192 | (rc.Top < this.Font.Height)) // Control overlaps ColumnHeader
193 | {
194 | ec.Control.Visible = false;
195 | continue;
196 | } else {
197 | ec.Control.Visible = true;
198 | }
199 |
200 | switch (ec.Dock) {
201 | case DockStyle.Top:
202 | rc.Height = ec.Control.Height;
203 | break;
204 | case DockStyle.Left:
205 | rc.Width = ec.Control.Width;
206 | break;
207 | case DockStyle.Bottom:
208 | rc.Offset(0, rc.Height - ec.Control.Height);
209 | rc.Height = ec.Control.Height;
210 | break;
211 | case DockStyle.Right:
212 | rc.Offset(rc.Width - ec.Control.Width, 0);
213 | rc.Width = ec.Control.Width;
214 | break;
215 | case DockStyle.None:
216 | rc.Size = ec.Control.Size;
217 | break;
218 | }
219 |
220 | // Set embedded control's bounds
221 | ec.Control.Bounds = rc;
222 | }
223 | }
224 | base.WndProc(ref m);
225 | }
226 | }
227 | }
--------------------------------------------------------------------------------
/MainForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace csharp_File_Shredder
2 | {
3 | partial class MainForm
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.components = new System.ComponentModel.Container();
32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
33 | this.btnShred = new System.Windows.Forms.Button();
34 | this.btnReset = new System.Windows.Forms.Button();
35 | this.lblXPL0 = new System.Windows.Forms.Label();
36 | this.chkShowFullPath = new System.Windows.Forms.CheckBox();
37 | this.txtboxBufferSize = new System.Windows.Forms.TextBox();
38 | this.lblBufferSize = new System.Windows.Forms.Label();
39 | this.lblKB = new System.Windows.Forms.Label();
40 | this.lblAmountToShred = new System.Windows.Forms.Label();
41 | this.lbldynAmountShredded = new System.Windows.Forms.Label();
42 | this.lblTimeTaken = new System.Windows.Forms.Label();
43 | this.lbldynTimeTaken = new System.Windows.Forms.Label();
44 | this.groupBox1 = new System.Windows.Forms.GroupBox();
45 | this.btnRemove = new System.Windows.Forms.Button();
46 | this.btnBrowse = new System.Windows.Forms.Button();
47 | this.lblPasses = new System.Windows.Forms.Label();
48 | this.cboxPasses = new System.Windows.Forms.ComboBox();
49 | this.lbldynSpeed = new System.Windows.Forms.Label();
50 | this.lblSpeed = new System.Windows.Forms.Label();
51 | this.lblMethod = new System.Windows.Forms.Label();
52 | this.cboxMethod = new System.Windows.Forms.ComboBox();
53 | this.contextMenuStripMain = new System.Windows.Forms.ContextMenuStrip(this.components);
54 | this.removeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
55 | this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
56 | this.lblACCELA = new System.Windows.Forms.Label();
57 | this.lblAnd = new System.Windows.Forms.Label();
58 | this.pbarMain = new csharp_File_Shredder.CustomProgressBar();
59 | this.listViewFiles = new csharp_File_Shredder.ListViewEx();
60 | this.colFileName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
61 | this.colFileSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
62 | this.colProgressBar = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
63 | this.groupBox1.SuspendLayout();
64 | this.contextMenuStripMain.SuspendLayout();
65 | this.SuspendLayout();
66 | //
67 | // btnShred
68 | //
69 | this.btnShred.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
70 | this.btnShred.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
71 | this.btnShred.Location = new System.Drawing.Point(381, 294);
72 | this.btnShred.Name = "btnShred";
73 | this.btnShred.Size = new System.Drawing.Size(96, 23);
74 | this.btnShred.TabIndex = 1;
75 | this.btnShred.Text = "Run";
76 | this.btnShred.UseVisualStyleBackColor = true;
77 | this.btnShred.Click += new System.EventHandler(this.btnShred_Click);
78 | //
79 | // btnReset
80 | //
81 | this.btnReset.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
82 | this.btnReset.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
83 | this.btnReset.Location = new System.Drawing.Point(147, 203);
84 | this.btnReset.Name = "btnReset";
85 | this.btnReset.Size = new System.Drawing.Size(60, 23);
86 | this.btnReset.TabIndex = 2;
87 | this.btnReset.Text = "Reset";
88 | this.btnReset.UseVisualStyleBackColor = true;
89 | this.btnReset.Click += new System.EventHandler(this.btnReset_Click);
90 | //
91 | // lblXPL0
92 | //
93 | this.lblXPL0.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
94 | this.lblXPL0.AutoSize = true;
95 | this.lblXPL0.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
96 | this.lblXPL0.Location = new System.Drawing.Point(221, 364);
97 | this.lblXPL0.Name = "lblXPL0";
98 | this.lblXPL0.Size = new System.Drawing.Size(33, 11);
99 | this.lblXPL0.TabIndex = 4;
100 | this.lblXPL0.Text = "XPL0";
101 | this.lblXPL0.MouseEnter += new System.EventHandler(this.lblXPL0_MouseEnter);
102 | this.lblXPL0.MouseLeave += new System.EventHandler(this.lblXPL0_MouseLeave);
103 | //
104 | // chkShowFullPath
105 | //
106 | this.chkShowFullPath.AutoSize = true;
107 | this.chkShowFullPath.Enabled = false;
108 | this.chkShowFullPath.Location = new System.Drawing.Point(606, 307);
109 | this.chkShowFullPath.Name = "chkShowFullPath";
110 | this.chkShowFullPath.Size = new System.Drawing.Size(97, 17);
111 | this.chkShowFullPath.TabIndex = 5;
112 | this.chkShowFullPath.Text = "Show Full Path";
113 | this.chkShowFullPath.UseVisualStyleBackColor = true;
114 | this.chkShowFullPath.Visible = false;
115 | //
116 | // txtboxBufferSize
117 | //
118 | this.txtboxBufferSize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
119 | this.txtboxBufferSize.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
120 | this.txtboxBufferSize.Location = new System.Drawing.Point(118, 241);
121 | this.txtboxBufferSize.Name = "txtboxBufferSize";
122 | this.txtboxBufferSize.Size = new System.Drawing.Size(58, 18);
123 | this.txtboxBufferSize.TabIndex = 6;
124 | this.txtboxBufferSize.Text = "65535";
125 | this.txtboxBufferSize.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtboxBufferSize_KeyPress);
126 | //
127 | // lblBufferSize
128 | //
129 | this.lblBufferSize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
130 | this.lblBufferSize.AutoSize = true;
131 | this.lblBufferSize.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
132 | this.lblBufferSize.Location = new System.Drawing.Point(13, 244);
133 | this.lblBufferSize.Name = "lblBufferSize";
134 | this.lblBufferSize.Size = new System.Drawing.Size(89, 11);
135 | this.lblBufferSize.TabIndex = 7;
136 | this.lblBufferSize.Text = "Buffer Size:";
137 | //
138 | // lblKB
139 | //
140 | this.lblKB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
141 | this.lblKB.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
142 | this.lblKB.Location = new System.Drawing.Point(177, 244);
143 | this.lblKB.Name = "lblKB";
144 | this.lblKB.Size = new System.Drawing.Size(48, 11);
145 | this.lblKB.TabIndex = 8;
146 | this.lblKB.Text = "bytes";
147 | //
148 | // lblAmountToShred
149 | //
150 | this.lblAmountToShred.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
151 | this.lblAmountToShred.AutoSize = true;
152 | this.lblAmountToShred.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
153 | this.lblAmountToShred.Location = new System.Drawing.Point(309, 218);
154 | this.lblAmountToShred.Name = "lblAmountToShred";
155 | this.lblAmountToShred.Size = new System.Drawing.Size(117, 11);
156 | this.lblAmountToShred.TabIndex = 11;
157 | this.lblAmountToShred.Text = "Amount Shredded:";
158 | //
159 | // lbldynAmountShredded
160 | //
161 | this.lbldynAmountShredded.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
162 | this.lbldynAmountShredded.AutoSize = true;
163 | this.lbldynAmountShredded.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
164 | this.lbldynAmountShredded.Location = new System.Drawing.Point(429, 218);
165 | this.lbldynAmountShredded.Name = "lbldynAmountShredded";
166 | this.lbldynAmountShredded.Size = new System.Drawing.Size(33, 11);
167 | this.lbldynAmountShredded.TabIndex = 12;
168 | this.lbldynAmountShredded.Text = "0 kB";
169 | //
170 | // lblTimeTaken
171 | //
172 | this.lblTimeTaken.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
173 | this.lblTimeTaken.AutoSize = true;
174 | this.lblTimeTaken.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
175 | this.lblTimeTaken.Location = new System.Drawing.Point(344, 244);
176 | this.lblTimeTaken.Name = "lblTimeTaken";
177 | this.lblTimeTaken.Size = new System.Drawing.Size(82, 11);
178 | this.lblTimeTaken.TabIndex = 13;
179 | this.lblTimeTaken.Text = "Time taken:";
180 | //
181 | // lbldynTimeTaken
182 | //
183 | this.lbldynTimeTaken.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
184 | this.lbldynTimeTaken.AutoSize = true;
185 | this.lbldynTimeTaken.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
186 | this.lbldynTimeTaken.Location = new System.Drawing.Point(429, 244);
187 | this.lbldynTimeTaken.Name = "lbldynTimeTaken";
188 | this.lbldynTimeTaken.Size = new System.Drawing.Size(33, 11);
189 | this.lbldynTimeTaken.TabIndex = 14;
190 | this.lbldynTimeTaken.Text = "0 ms";
191 | //
192 | // groupBox1
193 | //
194 | this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
195 | | System.Windows.Forms.AnchorStyles.Left)
196 | | System.Windows.Forms.AnchorStyles.Right)));
197 | this.groupBox1.Controls.Add(this.btnRemove);
198 | this.groupBox1.Controls.Add(this.pbarMain);
199 | this.groupBox1.Controls.Add(this.btnBrowse);
200 | this.groupBox1.Controls.Add(this.lblPasses);
201 | this.groupBox1.Controls.Add(this.cboxPasses);
202 | this.groupBox1.Controls.Add(this.lbldynSpeed);
203 | this.groupBox1.Controls.Add(this.lblSpeed);
204 | this.groupBox1.Controls.Add(this.lblMethod);
205 | this.groupBox1.Controls.Add(this.cboxMethod);
206 | this.groupBox1.Controls.Add(this.lbldynTimeTaken);
207 | this.groupBox1.Controls.Add(this.lblTimeTaken);
208 | this.groupBox1.Controls.Add(this.lbldynAmountShredded);
209 | this.groupBox1.Controls.Add(this.lblAmountToShred);
210 | this.groupBox1.Controls.Add(this.lblKB);
211 | this.groupBox1.Controls.Add(this.lblBufferSize);
212 | this.groupBox1.Controls.Add(this.txtboxBufferSize);
213 | this.groupBox1.Controls.Add(this.btnReset);
214 | this.groupBox1.Controls.Add(this.btnShred);
215 | this.groupBox1.Controls.Add(this.listViewFiles);
216 | this.groupBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
217 | this.groupBox1.Location = new System.Drawing.Point(12, 5);
218 | this.groupBox1.Name = "groupBox1";
219 | this.groupBox1.Size = new System.Drawing.Size(516, 356);
220 | this.groupBox1.TabIndex = 15;
221 | this.groupBox1.TabStop = false;
222 | //
223 | // btnRemove
224 | //
225 | this.btnRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
226 | this.btnRemove.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
227 | this.btnRemove.Location = new System.Drawing.Point(81, 203);
228 | this.btnRemove.Name = "btnRemove";
229 | this.btnRemove.Size = new System.Drawing.Size(60, 23);
230 | this.btnRemove.TabIndex = 22;
231 | this.btnRemove.Text = "Remove";
232 | this.btnRemove.UseVisualStyleBackColor = true;
233 | this.btnRemove.Click += new System.EventHandler(this.btnRemove_Click);
234 | //
235 | // btnBrowse
236 | //
237 | this.btnBrowse.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
238 | this.btnBrowse.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
239 | this.btnBrowse.Location = new System.Drawing.Point(15, 203);
240 | this.btnBrowse.Name = "btnBrowse";
241 | this.btnBrowse.Size = new System.Drawing.Size(60, 23);
242 | this.btnBrowse.TabIndex = 16;
243 | this.btnBrowse.Text = "Browse";
244 | this.btnBrowse.UseVisualStyleBackColor = true;
245 | this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click);
246 | //
247 | // lblPasses
248 | //
249 | this.lblPasses.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
250 | this.lblPasses.AutoSize = true;
251 | this.lblPasses.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
252 | this.lblPasses.Location = new System.Drawing.Point(13, 296);
253 | this.lblPasses.Name = "lblPasses";
254 | this.lblPasses.Size = new System.Drawing.Size(96, 11);
255 | this.lblPasses.TabIndex = 20;
256 | this.lblPasses.Text = "Total Passes:";
257 | //
258 | // cboxPasses
259 | //
260 | this.cboxPasses.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
261 | this.cboxPasses.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
262 | this.cboxPasses.FormattingEnabled = true;
263 | this.cboxPasses.Items.AddRange(new object[] {
264 | "1 Pass",
265 | "DOD (3 Passes)",
266 | "NSA (7 Passes)",
267 | "Gutmann (35 Passes)"});
268 | this.cboxPasses.Location = new System.Drawing.Point(119, 294);
269 | this.cboxPasses.Name = "cboxPasses";
270 | this.cboxPasses.Size = new System.Drawing.Size(158, 19);
271 | this.cboxPasses.TabIndex = 16;
272 | this.cboxPasses.Text = "1 Pass";
273 | //
274 | // lbldynSpeed
275 | //
276 | this.lbldynSpeed.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
277 | this.lbldynSpeed.AutoSize = true;
278 | this.lbldynSpeed.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
279 | this.lbldynSpeed.Location = new System.Drawing.Point(430, 270);
280 | this.lbldynSpeed.Name = "lbldynSpeed";
281 | this.lbldynSpeed.Size = new System.Drawing.Size(47, 11);
282 | this.lbldynSpeed.TabIndex = 19;
283 | this.lbldynSpeed.Text = "0 MBps";
284 | //
285 | // lblSpeed
286 | //
287 | this.lblSpeed.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
288 | this.lblSpeed.AutoSize = true;
289 | this.lblSpeed.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
290 | this.lblSpeed.Location = new System.Drawing.Point(379, 270);
291 | this.lblSpeed.Name = "lblSpeed";
292 | this.lblSpeed.Size = new System.Drawing.Size(47, 11);
293 | this.lblSpeed.TabIndex = 18;
294 | this.lblSpeed.Text = "Speed:";
295 | //
296 | // lblMethod
297 | //
298 | this.lblMethod.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
299 | this.lblMethod.AutoSize = true;
300 | this.lblMethod.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
301 | this.lblMethod.Location = new System.Drawing.Point(13, 270);
302 | this.lblMethod.Name = "lblMethod";
303 | this.lblMethod.Size = new System.Drawing.Size(89, 11);
304 | this.lblMethod.TabIndex = 17;
305 | this.lblMethod.Text = "Buffer Data:";
306 | //
307 | // cboxMethod
308 | //
309 | this.cboxMethod.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
310 | this.cboxMethod.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
311 | this.cboxMethod.FormattingEnabled = true;
312 | this.cboxMethod.Items.AddRange(new object[] {
313 | "Random",
314 | "Zero"});
315 | this.cboxMethod.Location = new System.Drawing.Point(118, 267);
316 | this.cboxMethod.Name = "cboxMethod";
317 | this.cboxMethod.Size = new System.Drawing.Size(89, 19);
318 | this.cboxMethod.TabIndex = 1;
319 | this.cboxMethod.Text = "Random";
320 | //
321 | // contextMenuStripMain
322 | //
323 | this.contextMenuStripMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
324 | this.removeToolStripMenuItem});
325 | this.contextMenuStripMain.Name = "contextMenuStripMain";
326 | this.contextMenuStripMain.Size = new System.Drawing.Size(118, 26);
327 | this.contextMenuStripMain.Text = "nigger";
328 | //
329 | // removeToolStripMenuItem
330 | //
331 | this.removeToolStripMenuItem.Name = "removeToolStripMenuItem";
332 | this.removeToolStripMenuItem.Size = new System.Drawing.Size(117, 22);
333 | this.removeToolStripMenuItem.Text = "Remove";
334 | this.removeToolStripMenuItem.Click += new System.EventHandler(this.removeToolStripMenuItem_Click);
335 | //
336 | // openFileDialog
337 | //
338 | this.openFileDialog.Multiselect = true;
339 | this.openFileDialog.Title = "Select a file to shred";
340 | this.openFileDialog.FileOk += new System.ComponentModel.CancelEventHandler(this.openFileDialog1_FileOk);
341 | //
342 | // lblACCELA
343 | //
344 | this.lblACCELA.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
345 | this.lblACCELA.AutoSize = true;
346 | this.lblACCELA.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
347 | this.lblACCELA.Location = new System.Drawing.Point(273, 364);
348 | this.lblACCELA.Name = "lblACCELA";
349 | this.lblACCELA.Size = new System.Drawing.Size(47, 11);
350 | this.lblACCELA.TabIndex = 16;
351 | this.lblACCELA.Text = "Accela";
352 | this.lblACCELA.MouseEnter += new System.EventHandler(this.lblACCELA_MouseEnter);
353 | this.lblACCELA.MouseLeave += new System.EventHandler(this.lblACCELA_MouseLeave);
354 | //
355 | // lblAnd
356 | //
357 | this.lblAnd.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
358 | this.lblAnd.AutoSize = true;
359 | this.lblAnd.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
360 | this.lblAnd.Location = new System.Drawing.Point(254, 364);
361 | this.lblAnd.Name = "lblAnd";
362 | this.lblAnd.Size = new System.Drawing.Size(19, 11);
363 | this.lblAnd.TabIndex = 17;
364 | this.lblAnd.Text = "&&&&";
365 | //
366 | // pbarMain
367 | //
368 | this.pbarMain.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
369 | | System.Windows.Forms.AnchorStyles.Right)));
370 | this.pbarMain.Location = new System.Drawing.Point(14, 328);
371 | this.pbarMain.Name = "pbarMain";
372 | this.pbarMain.Size = new System.Drawing.Size(489, 20);
373 | this.pbarMain.TabIndex = 21;
374 | //
375 | // listViewFiles
376 | //
377 | this.listViewFiles.AllowDrop = true;
378 | this.listViewFiles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
379 | | System.Windows.Forms.AnchorStyles.Left)
380 | | System.Windows.Forms.AnchorStyles.Right)));
381 | this.listViewFiles.AutoArrange = false;
382 | this.listViewFiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
383 | this.colFileName,
384 | this.colFileSize,
385 | this.colProgressBar});
386 | this.listViewFiles.ContextMenuStrip = this.contextMenuStripMain;
387 | this.listViewFiles.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
388 | this.listViewFiles.FullRowSelect = true;
389 | this.listViewFiles.GridLines = true;
390 | this.listViewFiles.Location = new System.Drawing.Point(14, 19);
391 | this.listViewFiles.Name = "listViewFiles";
392 | this.listViewFiles.Size = new System.Drawing.Size(489, 177);
393 | this.listViewFiles.TabIndex = 0;
394 | this.listViewFiles.UseCompatibleStateImageBehavior = false;
395 | this.listViewFiles.View = System.Windows.Forms.View.Details;
396 | this.listViewFiles.ColumnWidthChanging += new System.Windows.Forms.ColumnWidthChangingEventHandler(this.listViewFiles_ColumnWidthChanging);
397 | this.listViewFiles.SizeChanged += new System.EventHandler(this.listViewFiles_SizeChanged);
398 | this.listViewFiles.DragDrop += new System.Windows.Forms.DragEventHandler(this.listViewFiles_DragDrop);
399 | this.listViewFiles.DragEnter += new System.Windows.Forms.DragEventHandler(this.listViewFiles_DragEnter);
400 | //
401 | // colFileName
402 | //
403 | this.colFileName.Text = "File Name";
404 | this.colFileName.Width = 275;
405 | //
406 | // colFileSize
407 | //
408 | this.colFileSize.Text = "FileSize";
409 | this.colFileSize.Width = 83;
410 | //
411 | // colProgressBar
412 | //
413 | this.colProgressBar.Text = "Progress";
414 | this.colProgressBar.Width = 100;
415 | //
416 | // MainForm
417 | //
418 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
419 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
420 | this.ClientSize = new System.Drawing.Size(540, 377);
421 | this.Controls.Add(this.groupBox1);
422 | this.Controls.Add(this.lblAnd);
423 | this.Controls.Add(this.lblACCELA);
424 | this.Controls.Add(this.lblXPL0);
425 | this.Controls.Add(this.chkShowFullPath);
426 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
427 | this.MaximizeBox = false;
428 | this.MinimizeBox = false;
429 | this.MinimumSize = new System.Drawing.Size(556, 415);
430 | this.Name = "MainForm";
431 | this.Text = "C# File Shredder";
432 | this.groupBox1.ResumeLayout(false);
433 | this.groupBox1.PerformLayout();
434 | this.contextMenuStripMain.ResumeLayout(false);
435 | this.ResumeLayout(false);
436 | this.PerformLayout();
437 |
438 | }
439 |
440 | #endregion
441 |
442 | public csharp_File_Shredder.ListViewEx listViewFiles;
443 | private System.Windows.Forms.ColumnHeader colFileName;
444 | private System.Windows.Forms.ColumnHeader colFileSize;
445 | private System.Windows.Forms.Button btnShred;
446 | private System.Windows.Forms.Button btnReset;
447 | private System.Windows.Forms.Label lblXPL0;
448 | private System.Windows.Forms.CheckBox chkShowFullPath;
449 | private System.Windows.Forms.TextBox txtboxBufferSize;
450 | private System.Windows.Forms.Label lblBufferSize;
451 | private System.Windows.Forms.Label lblKB;
452 | private System.Windows.Forms.Label lblAmountToShred;
453 | private System.Windows.Forms.Label lbldynAmountShredded;
454 | private System.Windows.Forms.Label lblTimeTaken;
455 | private System.Windows.Forms.Label lbldynTimeTaken;
456 | private System.Windows.Forms.GroupBox groupBox1;
457 | private System.Windows.Forms.Label lblMethod;
458 | private System.Windows.Forms.ComboBox cboxMethod;
459 | private System.Windows.Forms.Label lbldynSpeed;
460 | private System.Windows.Forms.Label lblSpeed;
461 | private System.Windows.Forms.Label lblPasses;
462 | private System.Windows.Forms.ComboBox cboxPasses;
463 | private System.Windows.Forms.Button btnBrowse;
464 | private System.Windows.Forms.OpenFileDialog openFileDialog;
465 | private System.Windows.Forms.Label lblACCELA;
466 | private System.Windows.Forms.Label lblAnd;
467 | private System.Windows.Forms.Button btnRemove;
468 | public csharp_File_Shredder.CustomProgressBar pbarMain;
469 | private System.Windows.Forms.ColumnHeader colProgressBar;
470 | private System.Windows.Forms.ContextMenuStrip contextMenuStripMain;
471 | private System.Windows.Forms.ToolStripMenuItem removeToolStripMenuItem;
472 | }
473 | }
474 |
475 |
--------------------------------------------------------------------------------
/MainForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Text;
4 | using System.Linq;
5 | using System.Drawing;
6 | using System.Threading;
7 | using System.Collections;
8 | using System.Windows.Forms;
9 | using System.Security.Cryptography;
10 | using System.Runtime.Serialization;
11 |
12 | namespace csharp_File_Shredder
13 | {
14 | public partial class MainForm : Form
15 | {
16 |
17 | #region Header
18 |
19 | const int MAX_UNSIGNED_SHORT = 65535;
20 |
21 | int lastFileWipedIndex;
22 |
23 | //thread args struct/array lookup table
24 | [Flags]
25 | public enum ThreadArgs : int
26 | {
27 | FILES = 0, //array of strings that contain the full path to every file to delete
28 | MODE = 1, //0 = random data, 1 = zero'd
29 | BUFFER_SIZE = 2, //size of data to wipe per pass
30 | TOTAL_SIZE = 3, //total amount of data to wipe
31 | PASSES = 4, //total number of passes
32 | }
33 |
34 | //Passes to id dropdown lookup table
35 | [Flags]
36 | public enum PassesIndex : int
37 | {
38 | DEFAULT = 0,
39 | DOD = 1,
40 | NSA = 2,
41 | GUTTMAN = 3,
42 | }
43 |
44 | //passes lookup table
45 | [Flags]
46 | public enum Passes : int
47 | {
48 | DEFAULT = 1,
49 | DOD = 3,
50 | NSA = 7,
51 | GUTTMAN = 35,
52 | }
53 |
54 | //Delegate prototypes for safe GUI / threading
55 | public delegate void RemoveCompletedItems(int index);
56 | public delegate void UpdateLVPBarDelegate(int index, int value);
57 | public delegate void UpdatePBarDelegate(int value);
58 | public delegate void CleaningCompleteDelegate(UInt64 total_bytes_shredded, DateTime StartTime);
59 |
60 | public MainForm()
61 | {
62 | InitializeComponent();
63 |
64 | lastFileWipedIndex = -1;
65 |
66 | cboxPasses.DropDownStyle = ComboBoxStyle.DropDownList;
67 | cboxMethod.DropDownStyle = ComboBoxStyle.DropDownList;
68 |
69 | cboxPasses.Refresh();
70 | cboxMethod.Refresh();
71 | }
72 | #endregion
73 |
74 | #region User Functions
75 |
76 | /***********************************************************************
77 | *
78 | * @method: ResetListviewFiles
79 | * @notes: resets and refreshes main listview
80 | *
81 | ************************************************************************/
82 |
83 | private void ResetListviewFiles()
84 | {
85 | listViewFiles.RemoveAllControls(); //also removes listview items
86 | listViewFiles.Refresh();
87 | }
88 |
89 | /***********************************************************************
90 | *
91 | * @method: RemoveCompletedItemsMethod
92 | * @param: index : int - the index/iteration of the file within the shredder loop
93 | * @notes: removes the first item in the listview, fires when an item is deleted
94 | *
95 | ************************************************************************/
96 |
97 | private void RemoveCompletedItemsMethod(int index)
98 | {
99 | if (this.InvokeRequired) {
100 | this.Invoke(new RemoveCompletedItems(RemoveCompletedItemsMethod), new Object[] { index });
101 | return;
102 | }
103 |
104 | if (listViewFiles.Items.Count == 0) {
105 | return;
106 | }
107 |
108 | if (lastFileWipedIndex == index) {
109 | return;
110 | }
111 |
112 | lastFileWipedIndex = index;
113 |
114 | listViewFiles.RemoveFirst();
115 | listViewFiles.Refresh();
116 | }
117 |
118 | /***********************************************************************
119 | *
120 | * @method: CleaningComplete
121 | * @param: total_bytes_shredded : long - the total number of bytes deleted
122 | * @param: StartTime : DateTime - the time we started shredding
123 | * @notes: "event" to fire when we finish cleaning, to update texts and other stuff
124 | *
125 | ************************************************************************/
126 |
127 | private void CleaningComplete(UInt64 total_bytes_shredded, DateTime StartTime)
128 | {
129 | if (this.InvokeRequired) {
130 | this.Invoke(new CleaningCompleteDelegate(CleaningComplete), new Object[] { total_bytes_shredded, StartTime });
131 | return;
132 | }
133 |
134 | TimeSpan TimeTaken = DateTime.Now - StartTime;
135 | double total_kilobytes = (total_bytes_shredded / 1024);
136 | double total_megabytes = (total_kilobytes / 1024);
137 | double MBps = total_megabytes / TimeTaken.TotalSeconds;
138 |
139 | lbldynAmountShredded.Text = Helper.FormatKiloBytes(total_kilobytes);
140 | lbldynTimeTaken.Text = Helper.FormatMiliseconds(TimeTaken.TotalMilliseconds);
141 | lbldynSpeed.Text = Helper.FormatMBps(MBps); //do a check for speeds
142 |
143 | UpdateMainPBar(0);
144 | ResetListviewFiles();
145 | btnShred.Enabled = true;
146 | }
147 |
148 | /***********************************************************************
149 | *
150 | * @method: UpdateMainPBar
151 | * @param: value : int - the value to set the main progress bar to
152 | * @notes: sets main progress bar to specified value
153 | *
154 | ************************************************************************/
155 |
156 | public void UpdateMainPBar(int value)
157 | {
158 | if (this.InvokeRequired) {
159 | this.Invoke(new UpdatePBarDelegate(UpdateMainPBar), new Object[] { value });
160 | return;
161 | }
162 |
163 | if (pbarMain == null) {
164 | return;
165 | }
166 |
167 | pbarMain.Value = (value > 100) ? 100 : value;
168 | pbarMain.Refresh();
169 | }
170 |
171 | /***********************************************************************
172 | *
173 | * @method: UpdateLVPBar
174 | * @param: index : int - row index of the embedded control within the listview
175 | * @param: value : int - value to set the progress bar to
176 | * @notes: updates a progress bar to a given value at a given index
177 | *
178 | ************************************************************************/
179 |
180 | private void UpdateLVPBar(int index, int value)
181 | {
182 | if (this.InvokeRequired) {
183 | this.Invoke(new UpdateLVPBarDelegate(UpdateLVPBar), new Object[] { index, value });
184 | return;
185 | }
186 |
187 | try {
188 | if (listViewFiles.Items.Count < 0) {
189 | return;
190 | }
191 |
192 | CustomProgressBar pb = (CustomProgressBar)listViewFiles.GetEmbeddedControl(2, index);
193 |
194 | if (pb == null) {
195 | return;
196 | }
197 |
198 | pb.Value = (value > 100) ? 100 : value;
199 | pb.Refresh();
200 | } catch (System.Exception ex) {
201 | MessageBox.Show("UpdateLVPBar " + ex.Message);
202 | }
203 | }
204 |
205 | /***********************************************************************
206 | *
207 | * @method: addItemToListviewEx
208 | * @param: file : string - filename to put in listview
209 | * @notes: puts listview item on listview, then progress bar on listview item
210 | *
211 | ************************************************************************/
212 |
213 | private void addItemToListviewEx(string file)
214 | {
215 | //Add list view item
216 | listViewFiles.Items.Add(new ListViewItem(new string[] { file, Helper.FormatedFileSize(file) }));
217 |
218 | //Add progress bar to the list view
219 | addProgressBarToListviewEx(2, listViewFiles.Items.Count - 1);
220 | }
221 |
222 | /***********************************************************************
223 | *
224 | * @method: addProgressBarToListviewEx
225 | * @param: col : int - the column in the listview
226 | * @param: row : int - the row in the listview
227 | * @notes: adds a progress bar onto a listview at a specified col/row
228 | *
229 | ************************************************************************/
230 |
231 | private void addProgressBarToListviewEx(int col, int row)
232 | {
233 | if (listViewFiles == null) {
234 | return;
235 | }
236 |
237 | listViewFiles.AddEmbeddedControl(new CustomProgressBar(false), col, row);
238 | colProgressBar.Width = 100;
239 | }
240 |
241 | /***********************************************************************
242 | *
243 | * @method: RemoveSelectedListviewItems
244 | * @notes: Removes items that are selected from our main listview
245 | *
246 | ************************************************************************/
247 |
248 | private void RemoveSelectedListviewItems()
249 | {
250 | if (listViewFiles.SelectedItems.Count <= 0) {
251 | return;
252 | }
253 |
254 | foreach (ListViewItem lvi in listViewFiles.SelectedItems) {
255 | listViewFiles.RemoveItem(lvi.Index);
256 | }
257 | }
258 |
259 | #endregion
260 |
261 | #region Events
262 |
263 | private void btnShred_Click(object sender, EventArgs e)
264 | {
265 | ArrayList elements = Helper.GetListViewElements(listViewFiles, 0);
266 |
267 | if (elements.Count > 0) {
268 | btnShred.Enabled = false;
269 |
270 | //build the arguments to pass to the thread that shreds.
271 | ArrayList worker_args = new ArrayList();
272 | UInt64 mode = (UInt64)cboxMethod.SelectedIndex;
273 |
274 | worker_args.Add(elements); //elements
275 | worker_args.Add(mode); //mode
276 |
277 | //buffer size
278 | if (UInt64.TryParse(txtboxBufferSize.Text, out ulong iBuffersize)) {
279 | worker_args.Add(iBuffersize);
280 | } else {
281 | //default buffer
282 | iBuffersize = MAX_UNSIGNED_SHORT;
283 | worker_args.Add(iBuffersize);
284 | txtboxBufferSize.Text = iBuffersize.ToString();
285 | }
286 |
287 | //total size
288 | worker_args.Add(Helper.GetFileSizeInBytesFromFileList(elements));
289 |
290 | //passes
291 | int passes = 1;
292 | if (cboxPasses.SelectedIndex.Equals(PassesIndex.DOD)) {
293 | passes = (int)Passes.DOD;
294 | } else if (cboxPasses.SelectedIndex.Equals(PassesIndex.NSA)) {
295 | passes = (int)Passes.NSA;
296 | } else if (cboxPasses.SelectedIndex.Equals(PassesIndex.GUTTMAN)) {
297 | passes = (int)Passes.GUTTMAN;
298 | }
299 |
300 | worker_args.Add(passes);
301 |
302 | //Start the shredder thread and pass the data to it
303 | Thread threadFileShredder = new Thread(new ParameterizedThreadStart(FileShredderThread));
304 | threadFileShredder.Priority = ThreadPriority.Highest;
305 | threadFileShredder.Start(worker_args);
306 | }
307 | }
308 |
309 | private void btnReset_Click(object sender, EventArgs e)
310 | {
311 | ResetListviewFiles();
312 |
313 | lbldynTimeTaken.Text = "0 ms";
314 | lbldynSpeed.Text = "0 MBps";
315 | lbldynAmountShredded.Text = "0 KB";
316 |
317 | UpdateMainPBar(0);
318 | }
319 |
320 | private void btnBrowse_Click(object sender, EventArgs e)
321 | {
322 | openFileDialog.FileName = "";
323 | openFileDialog.ShowDialog();
324 | }
325 |
326 | private void btnRemove_Click(object sender, EventArgs e)
327 | {
328 | RemoveSelectedListviewItems();
329 | }
330 |
331 | private void listViewFiles_DragDrop(object sender, DragEventArgs e)
332 | {
333 | string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
334 |
335 | foreach (string file in files) {
336 | if (Helper.IsDirectory(file)) {
337 | ArrayList sub_files = Helper.GetFileNamesInDirectory(file, true, true);
338 | foreach (string s in sub_files) {
339 | addItemToListviewEx(s);
340 | }
341 | } else {
342 | addItemToListviewEx(file);
343 | }
344 | }
345 | }
346 |
347 | private void listViewFiles_DragEnter(object sender, DragEventArgs e)
348 | {
349 | if (e.Data.GetDataPresent(DataFormats.FileDrop, false)) {
350 | e.Effect = DragDropEffects.All;
351 | }
352 | }
353 |
354 | private void txtboxBufferSize_KeyPress(object sender, KeyPressEventArgs e)
355 | {
356 | e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar);
357 | }
358 |
359 | private void openFileDialog1_FileOk(object sender, EventArgs e)
360 | {
361 | string[] files = openFileDialog.FileNames;
362 |
363 | if (files.Count() > 0) {
364 | foreach (string file in files) {
365 | addItemToListviewEx(file);
366 | }
367 | }
368 | }
369 |
370 | private void lblXPL0_MouseEnter(object sender, EventArgs e)
371 | {
372 | lblXPL0.ForeColor = Color.LimeGreen;
373 | }
374 |
375 | private void lblXPL0_MouseLeave(object sender, EventArgs e)
376 | {
377 | if (lblXPL0.ForeColor.Equals(Color.LimeGreen)) {
378 | lblXPL0.ForeColor = Color.FromName("ControlText");
379 | }
380 | }
381 |
382 | private void lblACCELA_MouseEnter(object sender, EventArgs e)
383 | {
384 | lblACCELA.ForeColor = Color.Fuchsia;
385 | }
386 |
387 | private void lblACCELA_MouseLeave(object sender, EventArgs e)
388 | {
389 | if (lblACCELA.ForeColor.Equals(Color.Fuchsia)) {
390 | lblACCELA.ForeColor = Color.FromName("ControlText");
391 | }
392 | }
393 |
394 | private void listViewFiles_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
395 | {
396 | if (e.ColumnIndex.Equals(2)) {
397 | e.NewWidth = 100;
398 | e.Cancel = true;
399 | } else if (e.ColumnIndex.Equals(1)) {
400 | e.NewWidth = 83;
401 | e.Cancel = true;
402 | } else if (e.ColumnIndex.Equals(0)) {
403 | e.NewWidth = 275;
404 | e.Cancel = true;
405 | }
406 | }
407 |
408 | private void listViewFiles_SizeChanged(object sender, EventArgs e)
409 | {
410 | colFileSize.Width = 83;
411 | colProgressBar.Width = 100;
412 | colFileName.Width = (listViewFiles.Width - 25) - (colFileSize.Width + colProgressBar.Width);
413 | }
414 |
415 | private void removeToolStripMenuItem_Click(object sender, EventArgs e)
416 | {
417 | RemoveSelectedListviewItems();
418 | }
419 |
420 | #endregion
421 |
422 | #region Shredder
423 |
424 | /***********************************************************************
425 | *
426 | * @method: FileShredderThread
427 | * @param: arg : object - Array / struct data passed to the thread containing everything it needs
428 | * @notes: The heart of the beast
429 | *
430 | ************************************************************************/
431 |
432 | void FileShredderThread(object arg)
433 | {
434 | int file_index = 0;
435 | UInt64 total_data_written = 0;
436 | UInt64 total_bytes_shredded = 0;
437 | ArrayList arg_list = (ArrayList)arg;
438 | ArrayList files = (ArrayList)arg_list[(int)ThreadArgs.FILES];
439 | UInt64 mode = Convert.ToUInt64(arg_list[(int)ThreadArgs.MODE]);
440 | UInt64 passes = Convert.ToUInt64(arg_list[(int)ThreadArgs.PASSES]);
441 | UInt64 buf_size = Convert.ToUInt64(arg_list[(int)ThreadArgs.BUFFER_SIZE]);
442 | UInt64 total_data_to_write = Convert.ToUInt64(arg_list[(int)ThreadArgs.TOTAL_SIZE]);
443 | total_data_to_write *= passes;
444 | DateTime StartTime = DateTime.Now;
445 |
446 | foreach (string file in files) {
447 | UInt64 amount_written_to_current_element = 0;
448 |
449 | try {
450 | FileInfo fi = new FileInfo(file);
451 |
452 | if (fi.Exists) {
453 | for (UInt32 i_pass = 1; i_pass <= passes; i_pass++) {
454 | UInt64 file_length = (UInt64)fi.Length;
455 | total_bytes_shredded += file_length;
456 | FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Write);
457 |
458 | byte[] buff = new byte[buf_size];
459 |
460 | if (file_length > buf_size) {
461 | UInt64 total_iterations = file_length / buf_size;
462 | UInt32 current_iteration = 0;
463 | for (; current_iteration <= total_iterations; current_iteration++) {
464 | total_data_written += buf_size;
465 | amount_written_to_current_element += buf_size;
466 |
467 | if (current_iteration % 10 == 0) {
468 | UInt64 total_progress_percent = (total_data_written / total_data_to_write) * 100;
469 | UInt64 current_percent = (amount_written_to_current_element / ((UInt64)fi.Length * passes) * 100);
470 | UpdateMainPBar((int)total_progress_percent);
471 | UpdateLVPBar(file_index, (int)current_percent);
472 | }
473 |
474 | if (mode.Equals(0)) {
475 | RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider();
476 | rngCsp.GetBytes(buff);
477 | }
478 | fs.Write(buff, 0, (int)buf_size);
479 | }
480 | } else {
481 | fs.Write(buff, 0, (int)buf_size);
482 | }
483 | fs.Flush();
484 | fs.Close();
485 |
486 | //UNCOMMENT THESE TO DELETE FILE
487 | if (i_pass.Equals(passes)) {
488 | fi.Delete();
489 | }
490 | }
491 | }
492 | } catch (System.IO.IOException ioException) {
493 | MessageBox.Show("FileShredderThread " + ioException.Message);
494 | } catch (Exception except) {
495 | MessageBox.Show("FileShredderThread " + except.Message);
496 | }
497 | RemoveCompletedItemsMethod(file_index);
498 | file_index++;
499 | }
500 | CleaningComplete(total_bytes_shredded, StartTime);
501 | }
502 | #endregion
503 | }
504 |
505 | #region CustomProgressBar
506 |
507 | /***********************************************************************
508 | *
509 | * @class: CustomProgressBar
510 | * @extends: ProgressBar
511 | * @notes: Extends Progress bar and adds a textual % onto the control
512 | *
513 | ************************************************************************/
514 |
515 | public class CustomProgressBar : ProgressBar
516 | {
517 | private readonly bool bDrawText;
518 |
519 | private void SetStyle()
520 | {
521 | this.SetStyle(ControlStyles.DoubleBuffer
522 | | ControlStyles.AllPaintingInWmPaint
523 | | ControlStyles.UserPaint
524 | | ControlStyles.OptimizedDoubleBuffer
525 | | ControlStyles.ResizeRedraw
526 | | ControlStyles.SupportsTransparentBackColor, true);
527 | }
528 |
529 | public CustomProgressBar()
530 | {
531 | SetStyle();
532 | bDrawText = true;
533 | }
534 |
535 | public CustomProgressBar(bool drawtext)
536 | {
537 | SetStyle();
538 | bDrawText = drawtext;
539 | }
540 |
541 | protected override void OnPaint(PaintEventArgs e)
542 | {
543 | Rectangle bounds = this.ClientRectangle;
544 | ProgressBarRenderer.DrawHorizontalBar(e.Graphics, bounds);
545 |
546 | if (this.Value > 0) {
547 | Rectangle clip = new Rectangle((int)bounds.X + 1, (int)bounds.Y + 1, (int)(((float)this.Value / (float)this.Maximum) * (float)bounds.Width - 2), (int)bounds.Height - 2);
548 | ProgressBarRenderer.DrawHorizontalChunks(e.Graphics, clip);
549 |
550 | if (bDrawText) {
551 | e.Graphics.DrawString(this.Value.ToString("F00") + "%", new Font("Lucida Console", (float)8.25, FontStyle.Regular), Brushes.Black, new PointF(Width / 2 - 13, Height / 2 - 6));
552 | }
553 | }
554 | }
555 | }
556 | #endregion
557 | }
558 |
559 |
--------------------------------------------------------------------------------
/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Windows.Forms;
5 |
6 | namespace csharp_File_Shredder
7 | {
8 | static class Program
9 | {
10 | [STAThread]
11 | static void Main()
12 | {
13 | Application.EnableVisualStyles();
14 | Application.SetCompatibleTextRenderingDefault(false);
15 | Application.Run(new MainForm());
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("csharp_File_Shredder")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("csharp_File_Shredder")]
13 | [assembly: AssemblyCopyright("Copyright © 2012")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("d22e8dca-1a6a-4a63-b922-07e92f0329d6")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace csharp_File_Shredder.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Returns the cached ResourceManager instance used by this class.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("csharp_File_Shredder.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Overrides the current thread's CurrentUICulture property for all
51 | /// resource lookups using this strongly typed resource class.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace csharp_File_Shredder.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.8.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # csharp_file_shredder
2 |
3 | [](LICENSE)
4 | [](https://app.codacy.com/app/gellin/csharp_file_shredder?utm_source=github.com&utm_medium=referral&utm_content=gellin/csharp_file_shredder&utm_campaign=Badge_Grade_Dashboard)
5 | [](https://travis-ci.org/gellin/csharp_file_shredder)
6 |
7 | File Shredder originally created in C# circa 2011, project updated for VS 2017, C# 7.3, & .net 4.5
8 | The meat and bones of the code can be found at - [Main Form](MainForm.cs)
9 |
10 | Features
11 | 
12 |
13 | Credits
14 | * Backend development - Gellin/XPL0
15 | * GUI tweaks and stamp of approval - Accela
16 |
--------------------------------------------------------------------------------
/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/bin/Release/csharp_File_Shredder.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gellin/csharp_file_shredder/dab4d16ae9fc6a9e1e0e0a8e8df244497521e13f/bin/Release/csharp_File_Shredder.exe
--------------------------------------------------------------------------------
/csharp_File_Shredder.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | x86
6 | 8.0.30703
7 | 2.0
8 | {D6AB4C8F-40C1-45D8-8D75-EB1433B451F3}
9 | WinExe
10 | Properties
11 | csharp_File_Shredder
12 | csharp_File_Shredder
13 | v4.5
14 |
15 |
16 | 512
17 | false
18 | publish\
19 | true
20 | Disk
21 | false
22 | Foreground
23 | 7
24 | Days
25 | false
26 | false
27 | true
28 | 0
29 | 1.0.0.%2a
30 | false
31 | true
32 |
33 |
34 | x86
35 | true
36 | full
37 | false
38 | bin\Debug\
39 | DEBUG;TRACE
40 | prompt
41 | 4
42 | false
43 | 7.3
44 |
45 |
46 | x86
47 | pdbonly
48 | true
49 | bin\Release\
50 | TRACE
51 | prompt
52 | 4
53 | true
54 | false
55 | 7.3
56 |
57 |
58 | hex.ico
59 |
60 |
61 |
62 | True
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | Component
77 |
78 |
79 | Form
80 |
81 |
82 | MainForm.cs
83 |
84 |
85 |
86 |
87 | MainForm.cs
88 | Designer
89 |
90 |
91 | ResXFileCodeGenerator
92 | Resources.Designer.cs
93 | Designer
94 |
95 |
96 | True
97 | Resources.resx
98 | True
99 |
100 |
101 |
102 |
103 | SettingsSingleFileGenerator
104 | Settings.Designer.cs
105 |
106 |
107 | True
108 | Settings.settings
109 | True
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 | False
120 | Microsoft .NET Framework 4 Client Profile %28x86 and x64%29
121 | true
122 |
123 |
124 | False
125 | .NET Framework 3.5 SP1 Client Profile
126 | false
127 |
128 |
129 | False
130 | .NET Framework 3.5 SP1
131 | false
132 |
133 |
134 | False
135 | Windows Installer 3.1
136 | true
137 |
138 |
139 |
140 |
147 |
--------------------------------------------------------------------------------
/csharp_File_Shredder.csproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | publish\
5 |
6 |
7 |
8 |
9 |
10 | en-US
11 | false
12 |
13 |
--------------------------------------------------------------------------------
/csharp_File_Shredder.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.28010.2048
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csharp_File_Shredder", "csharp_File_Shredder.csproj", "{D6AB4C8F-40C1-45D8-8D75-EB1433B451F3}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|x86 = Debug|x86
11 | Release|x86 = Release|x86
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {D6AB4C8F-40C1-45D8-8D75-EB1433B451F3}.Debug|x86.ActiveCfg = Debug|x86
15 | {D6AB4C8F-40C1-45D8-8D75-EB1433B451F3}.Debug|x86.Build.0 = Debug|x86
16 | {D6AB4C8F-40C1-45D8-8D75-EB1433B451F3}.Release|x86.ActiveCfg = Release|x86
17 | {D6AB4C8F-40C1-45D8-8D75-EB1433B451F3}.Release|x86.Build.0 = Release|x86
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {B645E5B2-0167-4A2D-8F72-A67450AA8FD6}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/hex.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gellin/csharp_file_shredder/dab4d16ae9fc6a9e1e0e0a8e8df244497521e13f/hex.ico
--------------------------------------------------------------------------------
/notes/old code.txt:
--------------------------------------------------------------------------------
1 | [OLD CRAP]
2 |
3 | // protected override void OnPaintBackground(PaintEventArgs pevent)
4 | // {
5 | // base.OnPaintBackground(pevent);
6 | // }
7 |
8 | // public class CustomProgressBar : ProgressBar
9 | // {
10 | // public CustomProgressBar()
11 | // {
12 | // this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
13 | // }
14 | //
15 | // const int WmPaint = 15;
16 | //
17 | // protected override void WndProc(ref Message m)
18 | // {
19 | // base.WndProc(ref m);
20 | //
21 | // switch (m.Msg)
22 | // {
23 | // case WmPaint:
24 | // if (this.Value <= 100)
25 | // {
26 | // using (var graphics = Graphics.FromHwnd(Handle))
27 | // {
28 | // var textSize = graphics.MeasureString(this.Value.ToString("F00") + "%", new Font("Arial", (float)8.25, FontStyle.Regular));
29 | // graphics.DrawString(this.Value.ToString("F00") + "%", new Font("Arial", (float)8.25, FontStyle.Regular), Brushes.Black, (Width / 2) - (textSize.Width / 2), (Height / 2) - (textSize.Height / 2));
30 | // }
31 | // }
32 | // break;
33 | // }
34 | // }
35 | // }
36 |
37 |
38 | //old code to remove deleted items
39 |
40 | // This should be activated to remove the items from the list view as they are deleted,
41 | // if (value == 100 && listViewFiles.Items.Count > 0)
42 | // {
43 | // listViewFiles.Items.RemoveAt(0);
44 | // listViewFiles.Refresh();
45 | // }
46 |
47 |
48 |
49 |
50 |
51 | public class pBar : ProgressBar
52 | {
53 | public pBar()
54 | {
55 | this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
56 | }
57 |
58 | const int WmPaint = 15;
59 |
60 | protected override void WndProc(ref Message m)
61 | {
62 | base.WndProc(ref m);
63 |
64 | switch (m.Msg)
65 | {
66 | case WmPaint:
67 | if (this.Value <= 100)
68 | {
69 | using (var graphics = Graphics.FromHwnd(Handle))
70 | {
71 | var textSize = graphics.MeasureString(this.Value.ToString("F00") + "%", new Font("Arial", (float)8.25, FontStyle.Regular));
72 | graphics.DrawString(this.Value.ToString("F00") + "%", new Font("Arial", (float)8.25, FontStyle.Regular), Brushes.Black, (Width / 2) - (textSize.Width / 2), (Height / 2) - (textSize.Height / 2));
73 | }
74 | }
75 | break;
76 | }
77 | }
78 | }
79 |
80 | listView1.Items.Add(new ListViewItem(new string[] { "hi", "mad", "" }));
81 |
82 | int i_loops = 0;
83 | foreach (ListViewItem lvi in listView1.Items)
84 | {
85 | if (listView1.Items.Count - 1 == i_loops)
86 | {
87 | ProgressBar p = new ProgressBar();
88 | p.Name = "nigger";
89 | p.Bounds = lvi.SubItems[2].Bounds;
90 | p.Height = 10;
91 | p.Width = 50;
92 | listView1.Controls.Add(p);
93 | }
94 |
95 | // e.Cancel = true;
96 | // e.NewWidth = listView1.Columns[e.ColumnIndex].Width;
97 |
98 |
99 | if (e.ColumnIndex.Equals(0))
100 | {
101 | colFileSize.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
102 | }
103 | else if (e.ColumnIndex.Equals(1))
104 | {
105 | //
106 | int colwidth = colFileName.Width + colFileSize.Width;
107 | int coldif = listViewFiles.Width - colwidth;
108 | colFileSize.Width += coldif - 4;
109 | }
110 |
111 |
112 |
113 | // private void _embeddedControl_Click(object sender, EventArgs e)
114 | // {
115 | // // When a control is clicked the ListViewItem holding it is selected
116 | // foreach (EmbeddedControl ec in _embeddedControls)
117 | // {
118 | // if (ec.Control == (Control)sender)
119 | // {
120 | // this.SelectedItems.Clear();
121 | // ec.Item.Selected = true;
122 | // }
123 | // }
124 | // }
125 |
126 | // public void RemoveEmbeddedControl(Control c)
127 | // {
128 | // if (c == null)
129 | // throw new ArgumentNullException();
130 | //
131 | // foreach(EmbeddedControl ec in _embeddedControls)
132 | // {
133 | // if (ec.Control == c)
134 | // {
135 | // this.Controls.Remove(c);
136 | // _embeddedControls.Remove((object)ec);
137 | // return;
138 | // }
139 | // }
140 | // throw new Exception("Control not found!");
141 | // }
142 |
143 | // public void RemoveEmbeddedControl(Control c, int index)
144 | // {
145 | // if (c == null)
146 | // throw new ArgumentNullException();
147 | //
148 | // this.Controls.Remove(c);
149 | // _embeddedControls.RemoveAt(index);
150 | // }
151 |
152 |
153 |
154 | // foreach (ListViewItem lvi in listViewFiles.SelectedItems)
155 | // {
156 | // Control c = listViewFiles.GetEmbeddedControl(2, lvi.Index);
157 | // if (!c.Equals(null))
158 | // listViewFiles.RemoveEmbeddedControl(c);
159 | // }
160 | // foreach (ListViewItem lvi in listViewFiles.SelectedItems)
161 | // lvi.Remove();
162 |
163 |
164 |
165 |
166 | // private void RemoveListviewItem(ListViewItem lvi)
167 | // {
168 | // Control c = listViewFiles.GetEmbeddedControl(2, lvi.Index);
169 | // if (!c.Equals(null))
170 | // listViewFiles.RemoveEmbeddedControl(c);
171 | // lvi.Remove();
172 | // }
173 |
174 | // private void RemoveListviewItem(int index)
175 | // {
176 | // ListViewItem lvi = listViewFiles.Items[index];
177 | // if (!lvi.Equals(null))
178 | // {
179 | // Control c = listViewFiles.GetEmbeddedControl(2, index);
180 | // if (!c.Equals(null))
181 | // listViewFiles.RemoveEmbeddedControl(c);
182 | // lvi.Remove();
183 | // }
184 | // }
--------------------------------------------------------------------------------
/notes/todo_wip.txt:
--------------------------------------------------------------------------------
1 | [TODOS]
2 | press run, it checks if file is in use, if so kills the application
3 |
4 | renames the file and folders randomly X times, put the X on the GUI, and or create random lists of directory chains and or rename all lists of directory chains several times, then delete them
5 |
6 | time taken column on the listview, populate it when done.
7 |
8 | get number of processor cores, if there are multiple things to shred, spawn X number of threads; let x = total cpu cores.
9 |
10 | save config to an ini
11 |
12 | make advanced options form with some shit
13 |
14 | WIP: remove the element from listview as it completes / based on a check box in advanced options?
15 |
16 | doesnt clear the names of the files, just the content :(
17 |
18 | you can still drag stuff onto the listview or browse when its shredding and it wont take it into account, i dont think
--------------------------------------------------------------------------------
/obj/x86/Release/DesignTimeResolveAssemblyReferences.cache:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gellin/csharp_file_shredder/dab4d16ae9fc6a9e1e0e0a8e8df244497521e13f/obj/x86/Release/DesignTimeResolveAssemblyReferences.cache
--------------------------------------------------------------------------------
/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gellin/csharp_file_shredder/dab4d16ae9fc6a9e1e0e0a8e8df244497521e13f/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
--------------------------------------------------------------------------------
/obj/x86/Release/csharp_File_Shredder.MainForm.resources:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gellin/csharp_file_shredder/dab4d16ae9fc6a9e1e0e0a8e8df244497521e13f/obj/x86/Release/csharp_File_Shredder.MainForm.resources
--------------------------------------------------------------------------------
/obj/x86/Release/csharp_File_Shredder.Properties.Resources.resources:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gellin/csharp_file_shredder/dab4d16ae9fc6a9e1e0e0a8e8df244497521e13f/obj/x86/Release/csharp_File_Shredder.Properties.Resources.resources
--------------------------------------------------------------------------------
/obj/x86/Release/csharp_File_Shredder.csproj.FileListAbsolute.txt:
--------------------------------------------------------------------------------
1 | X:\C#\csharpfileshredder\csharp_File_Shredder\bin\Release\csharp_File_Shredder.exe
2 | X:\C#\csharpfileshredder\csharp_File_Shredder\bin\Release\csharp_File_Shredder.pdb
3 | X:\C#\csharpfileshredder\csharp_File_Shredder\obj\x86\Release\csharp_File_Shredder.MainForm.resources
4 | X:\C#\csharpfileshredder\csharp_File_Shredder\obj\x86\Release\csharp_File_Shredder.Properties.Resources.resources
5 | X:\C#\csharpfileshredder\csharp_File_Shredder\obj\x86\Release\csharp_File_Shredder.csproj.GenerateResource.Cache
6 | X:\C#\csharpfileshredder\csharp_File_Shredder\obj\x86\Release\csharp_File_Shredder.exe
7 | X:\C#\csharpfileshredder\csharp_File_Shredder\obj\x86\Release\csharp_File_Shredder.pdb
8 | C:\Users\Owner\Desktop\csharpfileshredder\csharp_File_Shredder\obj\x86\Release\csharp_File_Shredder.exe
9 | C:\Users\Owner\Desktop\csharpfileshredder\csharp_File_Shredder\obj\x86\Release\csharp_File_Shredder.pdb
10 | C:\Users\Owner\Desktop\csharpfileshredder\csharp_File_Shredder\bin\Release\csharp_File_Shredder.exe
11 | C:\Users\Owner\Desktop\csharpfileshredder\csharp_File_Shredder\bin\Release\csharp_File_Shredder.pdb
12 | C:\Users\Owner\Desktop\csharpfileshredder\csharp_File_Shredder\obj\x86\Release\csharp_File_Shredder.MainForm.resources
13 | C:\Users\Owner\Desktop\csharpfileshredder\csharp_File_Shredder\obj\x86\Release\csharp_File_Shredder.Properties.Resources.resources
14 | C:\Users\Owner\Desktop\csharpfileshredder\csharp_File_Shredder\obj\x86\Release\csharp_File_Shredder.csproj.GenerateResource.Cache
15 |
--------------------------------------------------------------------------------
/obj/x86/Release/csharp_File_Shredder.csproj.GenerateResource.Cache:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gellin/csharp_file_shredder/dab4d16ae9fc6a9e1e0e0a8e8df244497521e13f/obj/x86/Release/csharp_File_Shredder.csproj.GenerateResource.Cache
--------------------------------------------------------------------------------
/obj/x86/Release/csharp_File_Shredder.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gellin/csharp_file_shredder/dab4d16ae9fc6a9e1e0e0a8e8df244497521e13f/obj/x86/Release/csharp_File_Shredder.exe
--------------------------------------------------------------------------------
/obj/x86/Release/csharp_File_Shredder.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gellin/csharp_file_shredder/dab4d16ae9fc6a9e1e0e0a8e8df244497521e13f/obj/x86/Release/csharp_File_Shredder.pdb
--------------------------------------------------------------------------------
/readme/gui.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gellin/csharp_file_shredder/dab4d16ae9fc6a9e1e0e0a8e8df244497521e13f/readme/gui.gif
--------------------------------------------------------------------------------