diff --git a/Test_Delete.sln b/Test_Delete.sln
new file mode 100644
index 0000000..6bc1198
--- /dev/null
+++ b/Test_Delete.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.26430.14
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test_Delete", "Test_Delete\Test_Delete.csproj", "{EE2CCB92-EABE-412D-97BB-6BF7A1077413}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {EE2CCB92-EABE-412D-97BB-6BF7A1077413}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EE2CCB92-EABE-412D-97BB-6BF7A1077413}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EE2CCB92-EABE-412D-97BB-6BF7A1077413}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EE2CCB92-EABE-412D-97BB-6BF7A1077413}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Test_Delete/App.config b/Test_Delete/App.config
new file mode 100644
index 0000000..88fa402
--- /dev/null
+++ b/Test_Delete/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Test_Delete/Count.cs b/Test_Delete/Count.cs
new file mode 100644
index 0000000..4b2e974
--- /dev/null
+++ b/Test_Delete/Count.cs
@@ -0,0 +1,571 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Eugen.IO
+{
+ ///
+ /// Count files and/or directories
+ ///
+ class Count
+ {
+ #region Variablen
+ protected static long NumberOfFiles { set; get; } //Anzahl der Dateien
+ protected static long NumberOfDirectories { set; get; } //Anzahl der Verzeichnisse
+ #endregion
+
+ #region Konstruktor
+ ///
+ /// Count files or Directories in a directory.
+ ///
+ public Count()
+ {
+ }
+ #endregion
+
+ #region File
+ ///
+ /// Counts all files in a directory.
+ ///
+ /// A valid directory name.
+ /// Number of found files.
+ public long File(string directoryName)
+ {
+ //Zählt alle Dateien in einem Verzeichnis
+ long numberOfFiles = 0;
+ try
+ {
+ foreach (string fileName in System.IO.Directory.GetFiles(directoryName))
+ {
+ numberOfFiles++;
+ }
+ }
+ catch (Exception)
+ {
+ //Nichts tun, weil nicht notwendig
+ }
+
+ return numberOfFiles;
+ }
+
+ ///
+ /// Counts all files in a directory that correspond to a particular pattern sequence.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", ".ext", "*.ext", "*xyz.ext", "*xyz*"; "Xyz*", "*xyz", "wx*yz". ""=All files.
+ /// Number of found files.
+ public long File(string directoryName, string searchPattern)
+ {
+ //Zählt alle Dateien im angegebenen Verzeichnis die dem Suchkriterium entsprechen
+ //Gültige Suchpattern: "", ".txt", "*.txt", "*xyz*", "Xyz*", "*xyz", "wx*yz"
+ //Groß-/Kleinschreibung wird ignoriert
+
+ long numberOfFiles = 0;
+
+ try
+ {
+ foreach (string fileName in System.IO.Directory.GetFiles(directoryName))
+ {
+ if (SearchPatternFile(fileName, searchPattern))
+ {
+ numberOfFiles++;
+ }
+ }
+ }
+ catch
+ {
+ //Nichts tun, weil nicht notwendig
+ }
+
+ return numberOfFiles;
+ }
+
+ ///
+ /// Counts all files in a directory that correspond to a particular pattern sequence and older than 'n'-days.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", ".ext", "*.ext", "*xyz.ext", "*xyz*"; "Xyz*", "*xyz", "wx*yz". ""=All files.
+ /// Days the file must be old. 0=All files are counted.
+ /// Number of found files.
+ public long File(string directoryName, string searchPattern, int daysOld)
+ {
+ //Zählt alle Dateien im angegebenen Verzeichnis die dem Suchkriterium entsprechen und älter als n-Tage sind
+ //Gültige Suchpattern: "", ".txt", "*.txt", "*xyz*", "Xyz*", "*xyz", "wx*yz"
+ //Groß-/Kleinschreibung wird ignoriert
+
+ long numberOfFiles = 0;
+
+ try
+ {
+ foreach (string fileName in System.IO.Directory.GetFiles(directoryName))
+ {
+ if (SearchPatternFile(fileName, searchPattern) && DaysOld(fileName, daysOld))
+ {
+ numberOfFiles++;
+ }
+ }
+ }
+ catch
+ {
+ //Nichts tun, weil nicht notwendig
+ }
+
+ return numberOfFiles;
+ }
+
+ ///
+ /// Counts all files in a directory and all subdirectories that correspond to a particular pattern sequence and older than 'n'-days.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", ".ext", "*.ext", "*xyz.ext", "*xyz*"; "Xyz*", "*xyz", "wx*yz". ""=All files.
+ /// Days the file must be old. 0=All files are counted.
+ /// True=Search in all sudirectories recursive. False=Search only in root directory.
+ /// Number of found files.
+ public long File(string directoryName, string searchPattern, int daysOld, bool recursive)
+ {
+ //Löscht alle Dateien im angegebenen Verzeichnis und allen Unterverzeichnissen die dem Suchkriterium entsprechen und älter als n-Tage sind
+ //Gültige Suchpattern: "", ".txt", "*.txt", "*xyz*", "Xyz*", "*xyz", "wx*yz"
+ //Groß-/Kleinschreibung wird ignoriert
+
+ long numberOfFiles = 0;
+ long tempNumberOfFiles = 0;
+
+ try
+ {
+ foreach (string fileName in System.IO.Directory.GetFiles(directoryName))
+ {
+ if (SearchPatternFile(fileName, searchPattern) && DaysOld(fileName, daysOld))
+ {
+ numberOfFiles++;
+ }
+ }
+
+ if (recursive)
+ {
+ foreach (string dirName in System.IO.Directory.GetDirectories(directoryName))
+ {
+ tempNumberOfFiles = File(dirName, searchPattern, daysOld, recursive);
+
+ numberOfFiles = numberOfFiles + tempNumberOfFiles;
+ tempNumberOfFiles = 0;
+ }
+ }
+ }
+ catch
+ {
+ //Nichts tun, weil nicht notwendig
+ }
+
+ return numberOfFiles;
+ }
+ #endregion
+
+ #region Directory
+ ///
+ /// Counts all directories in a directory.
+ ///
+ /// A valid directory name.
+ /// Number of found directories.
+ public long Directory(string directoryName)
+ {
+ //Zählt das angegebene Verzeichnis
+ long numberOfDirectories = 0;
+ try
+ {
+ foreach (string dirName in System.IO.Directory.GetDirectories(directoryName))
+ {
+ numberOfDirectories++;
+ }
+ }
+ catch
+ {
+ //Nichts tun, weil nicht notwendig
+ }
+
+ return numberOfDirectories;
+ }
+
+ ///
+ /// Counts all directories in a directory that correspond to a particular pattern sequence.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", "*xyz*"; "Xyz*", "*xyz", "wx*yz". ""=All directories.
+ /// Number of found directories.
+ public long Directory(string directoryName, string searchPattern)
+ {
+ //Löscht alle Verzeichnisse und Dateien im angegebenen Verzeichnis die dem Suchkriterium entsprechen
+ //Gültige Suchpattern: "", "xyz*", "*xyz", "wx*yz", "*xyz*"
+ //Groß-/Kleinschreibung wird ignoriert
+
+ long numberOfDirectories = 0;
+
+ try
+ {
+ foreach (string dirName in System.IO.Directory.GetDirectories(directoryName))
+ {
+ if (SearchPatternDirectory(dirName, searchPattern))
+ {
+ numberOfDirectories++;
+ }
+ }
+ }
+ catch
+ {
+ //Nichts tun, weil nicht notwendig
+ }
+
+ return numberOfDirectories;
+ }
+
+ ///
+ /// Counts all directories in a directory that correspond to a particular pattern sequence and older than 'n'-days.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", "*xyz*"; "Xyz*", "*xyz", "wx*yz". ""=All directories.
+ /// Days the directory must be old. 0=All files are counted.
+ /// Number of found directories.
+ public long Directory(string directoryName, string searchPattern, int daysOld)
+ {
+ //Löscht alle Verzeichnisse und Dateien im angegebenen Verzeichnis die dem Suchkriterium entsprechen und älter als n-Tage sind
+ //Gültige Suchpattern: "", "xyz*", "*xyz", "wx*yz", "*xyz*"
+ //Groß-/Kleinschreibung wird ignoriert
+
+ long numberOfDirectories = 0;
+
+ try
+ {
+ foreach (string dirName in System.IO.Directory.GetDirectories(directoryName))
+ {
+ if (SearchPatternDirectory(dirName, searchPattern) && DaysOld(dirName, daysOld))
+ {
+ numberOfDirectories++;
+ }
+ }
+ }
+ catch
+ {
+ //Nichts tun, weil nicht notwendig
+ }
+
+ return numberOfDirectories;
+ }
+
+ ///
+ /// Counts all directories and all subdirectories in a directory that correspond to a particular pattern sequence and older than 'n'-days.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", "*xyz*"; "Xyz*", "*xyz", "wx*yz". ""=All directories.
+ /// Days the directory must be old. 0=All files are counted.
+ /// True=Search in all sudirectories recursive. False=Search only in root directory.
+ /// Number of found directories.
+ public long Directory(string directoryName, string searchPattern, int daysOld, bool recursive)
+ {
+ //Löscht alle Verzeichnisse und Dateien im angegebenen Verzeichnis und allen Unterverzeichnissen
+ //die dem Suchkriterium entsprechen und älter als n-Tage sind
+ //Gültige Suchpattern: "", "xyz*", "*xyz", "wx*yz", "*xyz*"
+ //Groß-/Kleinschreibung wird ignoriert
+
+ long numberOfDirectories = 0;
+ long tempNumberOfDirectories = 0;
+
+ try
+ {
+ foreach (string dirName in System.IO.Directory.GetDirectories(directoryName))
+ {
+ if (SearchPatternDirectory(dirName, searchPattern) && DaysOld(dirName, daysOld))
+ {
+ numberOfDirectories++;
+ }
+ }
+
+ if (recursive)
+ {
+ foreach (string dirName in System.IO.Directory.GetDirectories(directoryName))
+ {
+ tempNumberOfDirectories = Directory(dirName, searchPattern, daysOld, recursive);
+
+ numberOfDirectories = numberOfDirectories + tempNumberOfDirectories;
+ tempNumberOfDirectories = 0;
+ }
+ }
+ }
+ catch
+ {
+ //Nichts tun, weil nicht notwendig
+ }
+
+ return numberOfDirectories;
+ }
+
+ ///
+ /// Counts all directories and all subdirectories in a directory and the directory itself that correspond to a particular pattern sequence and older than 'n'-days.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", "*xyz*"; "Xyz*", "*xyz", "wx*yz". ""=All directories.
+ /// Days the directory must be old. 0=All files are counted.
+ /// True=Search in all sudirectories recursive. False=Search only in root directory.
+ /// True=Add the directory itself to the counter, false=The directory itself is not added to the counter.
+ ///
+ public long Directory(string directoryName, string searchPattern, int daysOld, bool recursive, bool countItself)
+ {
+ //Löscht alle Verzeichnisse und Dateien im angegebenen Verzeichnis und allen Unterverzeichnissen
+ //die dem Suchkriterium entsprechen und älter als n-Tage sind
+ //Gültige Suchpattern: "", "xyz*", "*xyz", "wx*yz", "*xyz*"
+ //Groß-/Kleinschreibung wird ignoriert
+
+ long numberOfDirectories = 0;
+
+ numberOfDirectories = Directory(directoryName, searchPattern, daysOld, recursive);
+
+ if (countItself)
+ {
+ numberOfDirectories++;
+ }
+
+ return numberOfDirectories;
+ }
+ #endregion
+
+ #region Subroutines
+ ///
+ /// Checks whether the search pattern is included in the file name.
+ ///
+ /// A valid file name.
+ /// Valid pattern sequence: "", ".ext", "*.ext", "*xyz.ext", "*xyz*"; "Xyz*", "*xyz", "wx*yz". ""=All files.
+ /// The search pattern is included in the file name=true, otherwise=false.
+ private bool SearchPatternFile(string fileName, string searchPattern)
+ {
+ string tempFileName = "";
+ string tempExtension = "";
+ string tempPattern = "";
+ string tempPattern1 = "";
+ bool match = false;
+ try
+ {
+ if (searchPattern == "")
+ {
+ match = true;
+ }
+ else if (searchPattern.StartsWith(".") | searchPattern.StartsWith("*."))
+ {
+ //Wenn mit '*', dann '*' entfernen
+ if (searchPattern.StartsWith("*"))
+ {
+ searchPattern = searchPattern.Replace("*", "");
+ }
+
+ //Nach Datei Erweiterung suchen
+ if (Path.GetExtension(fileName).ToLower() == searchPattern.ToLower())
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.StartsWith("*") & searchPattern.EndsWith("*"))
+ {
+ //Nach Teilstück suchen
+ tempFileName = Path.GetFileNameWithoutExtension(fileName).ToLower();
+ tempPattern = searchPattern.Replace("*", "").ToLower();
+
+ if (tempFileName.Contains(tempPattern))
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.EndsWith("*"))
+ {
+ //Nach Anfang Suchen
+ tempFileName = Path.GetFileNameWithoutExtension(fileName).ToLower();
+ tempPattern = searchPattern.Replace("*", "").ToLower();
+
+ if (tempFileName.StartsWith(tempPattern))
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.StartsWith("*") & searchPattern.Contains("."))
+ {
+ //Nach Teilstück suchen
+ tempFileName = Path.GetFileNameWithoutExtension(fileName).ToLower();
+ tempPattern = searchPattern.Replace("*", "").ToLower();
+ tempPattern = tempPattern.Remove(tempPattern.IndexOf("."));
+ tempExtension = Path.GetExtension(fileName).ToLower();
+ string test = searchPattern.Remove(0, searchPattern.IndexOf("."));
+
+ if (tempFileName.EndsWith(tempPattern) & searchPattern.Remove(0, searchPattern.IndexOf(".")) == tempExtension)
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.StartsWith("*"))
+ {
+ //Nach Ende Suchen
+ tempFileName = Path.GetFileNameWithoutExtension(fileName).ToLower();
+ tempPattern = searchPattern.Replace("*", "").ToLower();
+
+ if (tempFileName.EndsWith(tempPattern))
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.Contains("*"))
+ {
+ //Nach Anfang und Ende Suchen
+ tempFileName = Path.GetFileNameWithoutExtension(fileName).ToLower();
+ tempPattern = searchPattern.Remove(searchPattern.IndexOf("*"));
+ tempPattern1 = searchPattern.Remove(0, searchPattern.IndexOf("*") + 1);
+
+ if (tempFileName.StartsWith(tempPattern) & tempFileName.EndsWith(tempPattern1))
+ {
+ match = true;
+ }
+ }
+ else
+ {
+ match = false;
+ }
+ }
+ catch
+ {
+ match = false;
+ }
+
+ return match;
+ }
+
+ ///
+ /// Checks whether the search pattern is included in the directory name.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", "*xyz*"; "Xyz*", "*xyz", "wx*yz". ""=All directories.
+ /// The search pattern is included in the directory name=true, otherwise=false.
+ private bool SearchPatternDirectory(string directoryName, string searchPattern)
+ {
+ string tempDirectoryName = "";
+ string tempPattern = "";
+ string tempPattern1 = "";
+ bool match = false;
+ try
+ {
+ if (searchPattern == "")
+ {
+ match = true;
+ }
+ else if (searchPattern.StartsWith("*") & searchPattern.EndsWith("*"))
+ {
+ //Nach Teilstück suchen
+ tempDirectoryName = Path.GetFileNameWithoutExtension(directoryName).ToLower();
+ tempPattern = searchPattern.Replace("*", "").ToLower();
+
+ if (tempDirectoryName.Contains(tempPattern))
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.EndsWith("*"))
+ {
+ //Nach Anfang Suchen
+ tempDirectoryName = Path.GetFileNameWithoutExtension(directoryName).ToLower();
+ tempPattern = searchPattern.Replace("*", "").ToLower();
+
+ if (tempDirectoryName.StartsWith(tempPattern))
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.StartsWith("*"))
+ {
+ //Nach Ende Suchen
+ tempDirectoryName = Path.GetFileNameWithoutExtension(directoryName).ToLower();
+ tempPattern = searchPattern.Replace("*", "").ToLower();
+
+ if (tempDirectoryName.EndsWith(tempPattern))
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.Contains("*"))
+ {
+ //Nach Anfang und Ende Suchen
+ tempDirectoryName = Path.GetFileNameWithoutExtension(directoryName).ToLower();
+ tempPattern = searchPattern.Remove(searchPattern.IndexOf("*"));
+ tempPattern1 = searchPattern.Remove(0, searchPattern.IndexOf("*") + 1);
+
+ if (tempDirectoryName.StartsWith(tempPattern) & tempDirectoryName.EndsWith(tempPattern1))
+ {
+ match = true;
+ }
+ }
+ else
+ {
+ match = false;
+ }
+ }
+ catch
+ {
+ match = false;
+ }
+
+ return match;
+ }
+
+ ///
+ /// Checks how old the file is.
+ ///
+ /// A valid file or directory name.
+ /// Days how old the element must be. 0=All.
+ /// True=Is older as 'daysOld', otherwies=false.
+ private bool DaysOld(string fileName, int daysOld)
+ {
+ int calcDays = 0;
+ bool ok = false;
+
+ if (daysOld <= 0)
+ {
+ ok = true;
+ }
+ else
+ {
+ try
+ {
+ //Das Alter (letzter Zugriff) der Datei errechnen
+ DateTime dt = System.IO.File.GetLastAccessTime(fileName);
+ TimeSpan sp = DateTime.Now - dt;
+ calcDays = sp.Days;
+
+ if (calcDays > daysOld)
+ {
+ //Wenn die Datei älter als 'daysOld'-Tage ist
+ ok = true;
+ }
+ }
+ catch
+ {
+ ok = false;
+ }
+ }
+
+ return ok;
+ }
+ #endregion
+
+ #region Event Handler
+ // Der Delegat muß die gleiche Signatur aufweisen wie die Eventhandler-Methode.
+ public delegate void EventDelegate(int result, string status);
+
+ // Das Event-Objekt ist vom Typ dieses Delegaten.
+ public event EventDelegate DelStatus;
+
+ public void OnEvent(int result, string status)
+ {
+ // Prüft ob das Event überhaupt einen Abonnenten hat.
+ if (DelStatus != null)
+ {
+ DelStatus(result, status);
+ }
+ }
+ #endregion
+ }
+}
diff --git a/Test_Delete/Delete.cs b/Test_Delete/Delete.cs
new file mode 100644
index 0000000..937e6fe
--- /dev/null
+++ b/Test_Delete/Delete.cs
@@ -0,0 +1,754 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Eugen.IO
+{
+ ///
+ /// Deletes files and/or directories
+ ///
+ class Delete
+ {
+ #region Variablen
+ List undeletableFiles = new List(); //Liste der unlöschbaren Dateien
+ List undeletableDirectories = new List(); //Liste der unlöschbaren Verzeichnisse
+
+ public static long FileCounter { set; get; } //Anzahl der abgearbeiteten Dateien
+ public static long DirectoryCounter { set; get; } //Anzahl der abgearbeiteten Verzeichnisse
+
+ public static long NumberOfFiles { set; get; } //Anzahl der Dateien
+ public static long NumberOfDirectories { set; get; } //Anzahl der Verzeichnisse
+
+ public static List UndeletableFiles { set; get; } //Liste aller unlöschbaren Dateien
+ public static List UndeletableDirectories { set; get; } //Liste aller unlöschbaren Verzeichnisse
+
+ public static int PercentDone { set; get; } //Prozent abgeschlossen
+ public static string Status { set; get; } //Zeigt an welche Datei gerade gelöscht wird
+ #endregion
+
+ #region Konstruktor
+ ///
+ /// Delete files or directories in a directory.
+ ///
+ public Delete()
+ {
+ UndeletableFiles = undeletableFiles;
+ UndeletableDirectories = undeletableDirectories;
+ }
+ #endregion
+
+ #region File
+ ///
+ /// Deletes a singel file.
+ ///
+ /// A valid filename with path.
+ ///
+ public string File(string fileName)
+ {
+ //Löscht eine Datei
+ try
+ {
+ //Wert für ProgressBar berechnen
+ FileCounter++; //Zähler hochzählen
+ if ((NumberOfFiles + NumberOfDirectories) == 0)
+ {
+ PercentDone = 0;
+ }
+ else
+ {
+ PercentDone = Convert.ToInt32(100 / Convert.ToDouble(NumberOfFiles + NumberOfDirectories) * Convert.ToDouble(FileCounter + DirectoryCounter));
+ }
+ if (PercentDone > 100)
+ {
+ PercentDone = 100; //Auf max 100% begrenzen
+ }
+ Status = String.Concat("Delete ", fileName);
+ OnEvent(PercentDone, Status);
+
+ System.IO.File.SetAttributes(fileName, FileAttributes.Normal); //Attribute zurücksetzen
+ System.IO.File.Delete(fileName); //Datei löschen
+
+ return null; //Wenn löschen möglich war
+ }
+ catch (Exception)
+ {
+ UndeletableFiles.Add(fileName); //Dateiname in die Liste der unlöschbaren Dateien aufnehmen
+ return fileName; //Wenn löschen nicht möglich war
+ }
+ }
+
+ ///
+ /// Deletes a file in a directory that correspond to a particular pattern sequence.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", ".ext", "*.ext", "*xyz.ext", "*xyz*"; "Xyz*", "*xyz", "wx*yz". ""=All files.
+ /// If the file was successfully deleted, 'null' is returned, otherwise the filename.
+ public List File(string directoryName, string searchPattern)
+ {
+ //Löscht alle Dateien im angegebenen Verzeichnis die dem Suchkriterium entsprechen
+ //Gültige Suchpattern: "", ".txt", "*.txt", "*xyz*", "Xyz*", "*xyz", "wx*yz"
+ //Groß-/Kleinschreibung wird ignoriert
+
+ List undeletableFiles = new List(); //Liste der unlöschbaren Dateien
+ string tempUndelFile = null;
+
+ try
+ {
+ foreach (string fileName in System.IO.Directory.GetFiles(directoryName))
+ {
+ if (SearchPatternFile(fileName, searchPattern))
+ {
+ //Wenn Datei dem Suchpattern entspricht, dann löschen
+ tempUndelFile = File(fileName);
+ }
+
+ //Wenn ein Dateiname zurückgeliefert wird, dann in die Liste aufnehmen
+ if (tempUndelFile != null)
+ {
+ undeletableFiles.Add(tempUndelFile);
+ tempUndelFile = null; //Variable wieder zurücksetzen
+ }
+ }
+ }
+ catch
+ {
+ //Nichts tun, weil nicht notwendig
+ }
+
+ return undeletableFiles;
+ }
+
+ ///
+ /// Deletes a file in a directory that correspond to a particular pattern sequence and older than 'n'-days.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", ".ext", "*.ext", "*xyz.ext", "*xyz*"; "Xyz*", "*xyz", "wx*yz". ""=All files.
+ /// Days the file must be old. 0=All files are counted.
+ /// If the file was successfully deleted, 'null' is returned, otherwise the filename.
+ public List File(string directoryName, string searchPattern, int daysOld)
+ {
+ //Löscht alle Dateien im angegebenen Verzeichnis die dem Suchkriterium entsprechen und älter als n-Tage sind
+ //Gültige Suchpattern: "", ".txt", "*.txt", "*xyz*", "Xyz*", "*xyz", "wx*yz"
+ //Groß-/Kleinschreibung wird ignoriert
+
+ List undeletableFiles = new List(); //Liste der unlöschbaren Dateien
+ string tempUndelFile = null;
+
+ try
+ {
+ foreach (string fileName in System.IO.Directory.GetFiles(directoryName))
+ {
+ if (SearchPatternFile(fileName, searchPattern) && DaysOld(fileName, daysOld))
+ {
+ //Wenn Datei dem Suchpattern entspricht, dann löschen
+ tempUndelFile = File(fileName);
+ }
+
+ //Wenn ein Dateiname zurückgeliefert wird, dann in die Liste aufnehmen
+ if (tempUndelFile != null)
+ {
+ undeletableFiles.Add(tempUndelFile);
+ tempUndelFile = null; //Variable wieder zurücksetzen
+ }
+ }
+ }
+ catch
+ {
+ //Nichts tun, weil nicht notwendig
+ }
+
+ return undeletableFiles;
+ }
+
+ ///
+ /// Deletes a file in a directory and all subdirectories that correspond to a particular pattern sequence and older than 'n'-days.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", ".ext", "*.ext", "*xyz.ext", "*xyz*"; "Xyz*", "*xyz", "wx*yz". ""=All files.
+ /// Days the file must be old. 0=All files are counted.
+ /// True=Search in all sudirectories recursive. False=Search only in root directory.
+ /// If the file was successfully deleted, 'null' is returned, otherwise the filename.
+ public List File(string directoryName, string searchPattern, int daysOld, bool recursive)
+ {
+ //Löscht alle Dateien im angegebenen Verzeichnis und allen Unterverzeichnissen die dem Suchkriterium entsprechen und älter als n-Tage sind
+ //Gültige Suchpattern: "", ".txt", "*.txt", "*xyz*", "Xyz*", "*xyz", "wx*yz"
+ //Groß-/Kleinschreibung wird ignoriert
+
+ List undeletableFiles = new List(); //Liste der unlöschbaren Dateien
+ List tempUndeletableFiles = new List();
+ string tempUndelFile = null;
+
+ try
+ {
+ foreach (string fileName in System.IO.Directory.GetFiles(directoryName))
+ {
+ if (SearchPatternFile(fileName, searchPattern) && DaysOld(fileName, daysOld))
+ {
+ //Wenn Datei dem Suchpattern entspricht, dann löschen
+ tempUndelFile = File(fileName);
+ }
+
+ //Wenn ein Dateiname zurückgeliefert wird, dann in die Liste aufnehmen
+ if (tempUndelFile != null)
+ {
+ undeletableFiles.Add(tempUndelFile);
+ tempUndelFile = null; //Variable wieder zurücksetzen
+ }
+ }
+
+ if (recursive)
+ {
+ foreach (string dirName in System.IO.Directory.GetDirectories(directoryName))
+ {
+ tempUndeletableFiles = File(dirName, searchPattern, daysOld, recursive);
+
+ if (tempUndeletableFiles.Count != 0)
+ {
+ undeletableFiles.AddRange(tempUndeletableFiles); //Unlöschbare Dateien zur Liste hinzufügen
+ tempUndeletableFiles.Clear(); //Liste wieder leeren
+ }
+ }
+ }
+ }
+ catch
+ {
+ //Nichts tun, weil nicht notwendig
+ }
+
+ return undeletableFiles;
+ }
+ #endregion
+
+ #region Directory
+ ///
+ /// Deletes the spicified directory. It is not checked whether subdirectories are included.
+ ///
+ /// A valid directory name.
+ /// If the directory was successfully deleted, 'null' is returned, otherwise the directoryname.
+ public string Directory(string directoryName)
+ {
+ //Löscht das angegebene Verzeichnis
+ try
+ {
+ //Wert für ProgressBar berechnen
+ DirectoryCounter++; //Zähler hochzählen
+ if ((NumberOfFiles + NumberOfDirectories) == 0)
+ {
+ PercentDone = 0;
+ }
+ else
+ {
+ PercentDone = Convert.ToInt32(100 / Convert.ToDouble(NumberOfFiles + NumberOfDirectories) * Convert.ToDouble(FileCounter + DirectoryCounter));
+ }
+ if (PercentDone > 100)
+ {
+ PercentDone = 100; //Auf max 100% begrenzen
+ }
+ Status = String.Concat("Delete ", directoryName);
+ OnEvent(PercentDone, Status);
+
+ if (System.IO.Directory.Exists(directoryName))
+ {
+ //Damit das Verzeichnis gelöscht werden kann, erst alle Dateien löschen
+ File(directoryName, "");
+
+ //Schreibschutz aufheben
+ DirectoryInfo dirInfo = new DirectoryInfo(directoryName);
+ dirInfo.Attributes = FileAttributes.Normal;
+
+ System.IO.Directory.Delete(directoryName, false);
+ }
+
+ return null;
+ }
+ catch
+ {
+ UndeletableDirectories.Add(directoryName); //Verzeichnis in die Liste der unlöschbaren Verzeichnisse aufnehmen
+ return directoryName; //Wenn löschen nicht möglich war
+ }
+ }
+
+ ///
+ /// Deletes all directories in a directory that correspond to a particular pattern sequence.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", "xyz*", "*xyz", "wx*yz", "*xyz*". ""=All files.
+ /// If the directory was successfully deleted, 'null' is returned, otherwise the directoryname.
+ public List Directory(string directoryName, string searchPattern)
+ {
+ //Löscht alle Verzeichnisse und Dateien im angegebenen Verzeichnis die dem Suchkriterium entsprechen
+ //Gültige Suchpattern: "", "xyz*", "*xyz", "wx*yz", "*xyz*"
+ //Groß-/Kleinschreibung wird ignoriert
+
+ List undeletableDirectories = new List(); //Liste der unlöschbaren Verzeichnisse
+ string tempUndelDirectory = null;
+
+ try
+ {
+ foreach (string dirName in System.IO.Directory.GetDirectories(directoryName))
+ {
+ if (SearchPatternDirectory(dirName, searchPattern))
+ {
+ //Wenn Verzeichnis dem Suchpattern entspricht, dann löschen
+ tempUndelDirectory = Directory(dirName);
+ }
+
+ //Wenn ein Verzeichnsname zurückgeliefert wird, dann in die Liste aufnehmen
+ if (tempUndelDirectory != null)
+ {
+ undeletableDirectories.Add(tempUndelDirectory);
+ tempUndelDirectory = null; //Variable wieder zurücksetzen
+ }
+ }
+ }
+ catch
+ {
+ //Nichts tun, weil nicht notwendig
+ }
+
+ return undeletableDirectories;
+ }
+
+ ///
+ /// Deletes all directories in a directory that correspond to a particular pattern sequence and older than 'n'-days.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", "xyz*", "*xyz", "wx*yz", "*xyz*". ""=All files.
+ /// Days the directory must be old. 0=All directories are deleted.
+ /// If the directory was successfully deleted, 'null' is returned, otherwise the directoryname.
+ public List Directory(string directoryName, string searchPattern, int daysOld)
+ {
+ //Löscht alle Verzeichnisse und Dateien im angegebenen Verzeichnis die dem Suchkriterium entsprechen und älter als n-Tage sind
+ //Gültige Suchpattern: "", "xyz*", "*xyz", "wx*yz", "*xyz*"
+ //Groß-/Kleinschreibung wird ignoriert
+
+ List undeletableDirectories = new List(); //Liste der unlöschbaren Verzeichnisse
+ string tempUndelDirectory = null;
+
+ try
+ {
+ foreach (string dirName in System.IO.Directory.GetDirectories(directoryName))
+ {
+ if (SearchPatternDirectory(dirName, searchPattern) && DaysOld(dirName, daysOld))
+ {
+ //Wenn Verzeichnis dem Suchpattern entspricht, dann löschen
+ tempUndelDirectory = Directory(dirName);
+ }
+
+ //Wenn ein Verzeichnsname zurückgeliefert wird, dann in die Liste aufnehmen
+ if (tempUndelDirectory != null)
+ {
+ undeletableDirectories.Add(tempUndelDirectory);
+ tempUndelDirectory = null; //Variable wieder zurücksetzen
+ }
+ }
+ }
+ catch
+ {
+ //Nichts tun, weil nicht notwendig
+ }
+
+ return undeletableDirectories;
+ }
+
+ ///
+ /// Deletes all directories in a directory and all subdirectories that correspond to a particular pattern sequence and older than 'n'-days.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", "xyz*", "*xyz", "wx*yz", "*xyz*". ""=All files.
+ /// Days the directory must be old. 0=All directories are deleted.
+ /// True=Search in all sudirectories recursive. False=Search only in root directory.
+ ///
+ public List Directory(string directoryName, string searchPattern, int daysOld, bool recursive)
+ {
+ //Löscht alle Verzeichnisse und Dateien im angegebenen Verzeichnis und allen Unterverzeichnissen
+ //die dem Suchkriterium entsprechen und älter als n-Tage sind
+ //Gültige Suchpattern: "", "xyz*", "*xyz", "wx*yz", "*xyz*"
+ //Groß-/Kleinschreibung wird ignoriert
+
+ List undeletableDirectories = new List(); //Liste der unlöschbaren Verzeichnisse
+ List tempUndeletableDirectories = new List();
+ string tempUndelDirectory = null;
+
+ try
+ {
+ foreach (string dirName in System.IO.Directory.GetDirectories(directoryName))
+ {
+ if (SearchPatternDirectory(dirName, searchPattern) && DaysOld(dirName, daysOld))
+ {
+ //Wenn Verzeichnis dem Suchpattern entspricht, dann löschen
+ tempUndelDirectory = Directory(dirName);
+ }
+
+ //Wenn ein Verzeichnsname zurückgeliefert wird, dann in die Liste aufnehmen
+ if (tempUndelDirectory != null)
+ {
+ undeletableDirectories.Add(tempUndelDirectory);
+ tempUndelDirectory = null; //Variable wieder zurücksetzen
+ }
+ }
+
+ if (recursive)
+ {
+ foreach (string dirName in System.IO.Directory.GetDirectories(directoryName))
+ {
+ tempUndeletableDirectories = Directory(dirName, searchPattern, daysOld, recursive);
+
+ if (tempUndeletableDirectories.Count != 0)
+ {
+ undeletableDirectories.AddRange(tempUndeletableDirectories); //Unlöschbare Verzeichnisse zur Liste hinzufügen
+ tempUndeletableDirectories.Clear(); //Liste wieder leeren
+ }
+ }
+ }
+ }
+ catch
+ {
+ //Nichts tun, weil nicht notwendig
+ }
+
+ return undeletableDirectories;
+ }
+
+ ///
+ /// Deletes all directories in a directory and all subdirectories and the directory itself that correspond to a particular pattern sequence and older than 'n'-days.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", "xyz*", "*xyz", "wx*yz", "*xyz*". ""=All files.
+ /// Days the directory must be old. 0=All directories are deleted.
+ /// True=Search in all sudirectories recursive. False=Search only in root directory.
+ /// True=Delete also the root directory itself, False=Delete not the root directory itself.
+ ///
+ public List Directory(string directoryName, string searchPattern, int daysOld, bool recursive, bool deleteItself)
+ {
+ //Löscht alle Verzeichnisse und Dateien im angegebenen Verzeichnis und allen Unterverzeichnissen
+ //die dem Suchkriterium entsprechen und älter als n-Tage sind
+ //Gültige Suchpattern: "", "xyz*", "*xyz", "wx*yz", "*xyz*"
+ //Groß-/Kleinschreibung wird ignoriert
+
+ List undeletableDirectories = new List(); //Liste der unlöschbaren Verzeichnisse
+ List tempUndeletableDirectories = new List();
+ string tempUndelDirectory = null;
+
+ tempUndeletableDirectories = Directory(directoryName, searchPattern, daysOld, recursive);
+
+ if (tempUndeletableDirectories.Count != 0)
+ {
+ undeletableDirectories.AddRange(tempUndeletableDirectories); //Unlöschbare Verzeichnisse zur Liste hinzufügen
+ tempUndeletableDirectories.Clear(); //Liste wieder leeren
+ }
+
+ if (deleteItself)
+ {
+ if (SearchPatternDirectory(directoryName, searchPattern) && DaysOld(directoryName, daysOld))
+ {
+ //Wenn Verzeichnis dem Suchpattern entspricht, dann löschen
+ tempUndelDirectory = Directory(directoryName);
+ }
+
+ if (tempUndelDirectory != null)
+ {
+ undeletableDirectories.Add(tempUndelDirectory); //Unlöschbares Verzeichnis zur Liste hinzufügen
+ tempUndelDirectory = null; //Zurücksetzen
+ }
+ }
+
+ return undeletableDirectories;
+ }
+ #endregion
+
+ #region Reset Counters
+ ///
+ /// Resets the file counter to 0.
+ ///
+ public static void ResetFileCounter()
+ {
+ FileCounter = 0;
+ }
+
+ ///
+ /// Resets the directory counter to 0.
+ ///
+ public static void ResetDirectoryCounter()
+ {
+ DirectoryCounter = 0;
+ }
+
+ ///
+ /// Resets the number of files to 0.
+ ///
+ public static void ResetNumberOfFiles()
+ {
+ NumberOfFiles = 0;
+ }
+
+ ///
+ /// Resets the number of directories to 0.
+ ///
+ public static void ResetNumberOfDirectories()
+ {
+ NumberOfDirectories = 0;
+ }
+ #endregion
+
+ #region Clear
+ ///
+ /// Clears the undeletabele file list.
+ ///
+ public void ClearUndeletableFiles()
+ {
+ UndeletableFiles.Clear();
+ }
+
+ ///
+ /// Clears the undeletabele directory list.
+ ///
+ public void ClearUndeletableDirectories()
+ {
+ UndeletableDirectories.Clear();
+ }
+ #endregion
+
+ #region Subroutines
+ ///
+ /// Checks whether the search pattern is included in the file name.
+ ///
+ /// A valid file name.
+ /// Valid pattern sequence: "", ".ext", "*.ext", "*xyz.ext", "*xyz*"; "Xyz*", "*xyz", "wx*yz". ""=All files.
+ /// The search pattern is included in the file name=true, otherwise=false.
+ private bool SearchPatternFile(string fileName, string searchPattern)
+ {
+ string tempFileName = "";
+ string tempExtension = "";
+ string tempPattern = "";
+ string tempPattern1 = "";
+ bool match = false;
+ try
+ {
+ if (searchPattern == "")
+ {
+ match = true;
+ }
+ else if (searchPattern.StartsWith(".") | searchPattern.StartsWith("*."))
+ {
+ //Wenn mit '*', dann '*' entfernen
+ if (searchPattern.StartsWith("*"))
+ {
+ searchPattern = searchPattern.Replace("*", "");
+ }
+
+ //Nach Datei Erweiterung suchen
+ if (Path.GetExtension(fileName).ToLower() == searchPattern.ToLower())
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.StartsWith("*") & searchPattern.EndsWith("*"))
+ {
+ //Nach Teilstück suchen
+ tempFileName = Path.GetFileNameWithoutExtension(fileName).ToLower();
+ tempPattern = searchPattern.Replace("*", "").ToLower();
+
+ if (tempFileName.Contains(tempPattern))
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.EndsWith("*"))
+ {
+ //Nach Anfang Suchen
+ tempFileName = Path.GetFileNameWithoutExtension(fileName).ToLower();
+ tempPattern = searchPattern.Replace("*", "").ToLower();
+
+ if (tempFileName.StartsWith(tempPattern))
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.StartsWith("*") & searchPattern.Contains("."))
+ {
+ //Nach Teilstück suchen
+ tempFileName = Path.GetFileNameWithoutExtension(fileName).ToLower();
+ tempPattern = searchPattern.Replace("*", "").ToLower();
+ tempPattern = tempPattern.Remove(tempPattern.IndexOf("."));
+ tempExtension = Path.GetExtension(fileName).ToLower();
+ string test = searchPattern.Remove(0, searchPattern.IndexOf("."));
+
+ if (tempFileName.EndsWith(tempPattern) & searchPattern.Remove(0, searchPattern.IndexOf(".")) == tempExtension)
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.StartsWith("*"))
+ {
+ //Nach Ende Suchen
+ tempFileName = Path.GetFileNameWithoutExtension(fileName).ToLower();
+ tempPattern = searchPattern.Replace("*", "").ToLower();
+
+ if (tempFileName.EndsWith(tempPattern))
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.Contains("*"))
+ {
+ //Nach Anfang und Ende Suchen
+ tempFileName = Path.GetFileNameWithoutExtension(fileName).ToLower();
+ tempPattern = searchPattern.Remove(searchPattern.IndexOf("*"));
+ tempPattern1 = searchPattern.Remove(0, searchPattern.IndexOf("*") + 1);
+
+ if (tempFileName.StartsWith(tempPattern) & tempFileName.EndsWith(tempPattern1))
+ {
+ match = true;
+ }
+ }
+ else
+ {
+ match = false;
+ }
+ }
+ catch
+ {
+ match = false;
+ }
+
+ return match;
+ }
+
+ ///
+ /// Checks whether the search pattern is included in the directory name.
+ ///
+ /// A valid directory name.
+ /// Valid pattern sequence: "", "*xyz*"; "Xyz*", "*xyz", "wx*yz". ""=All directories.
+ /// The search pattern is included in the directory name=true, otherwise=false.
+ private bool SearchPatternDirectory(string directoryName, string searchPattern)
+ {
+ string tempDirectoryName = "";
+ string tempPattern = "";
+ string tempPattern1 = "";
+ bool match = false;
+ try
+ {
+ if (searchPattern == "")
+ {
+ match = true;
+ }
+ else if (searchPattern.StartsWith("*") & searchPattern.EndsWith("*"))
+ {
+ //Nach Teilstück suchen
+ tempDirectoryName = Path.GetFileNameWithoutExtension(directoryName).ToLower();
+ tempPattern = searchPattern.Replace("*", "").ToLower();
+
+ if (tempDirectoryName.Contains(tempPattern))
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.EndsWith("*"))
+ {
+ //Nach Anfang Suchen
+ tempDirectoryName = Path.GetFileNameWithoutExtension(directoryName).ToLower();
+ tempPattern = searchPattern.Replace("*", "").ToLower();
+
+ if (tempDirectoryName.StartsWith(tempPattern))
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.StartsWith("*"))
+ {
+ //Nach Ende Suchen
+ tempDirectoryName = Path.GetFileNameWithoutExtension(directoryName).ToLower();
+ tempPattern = searchPattern.Replace("*", "").ToLower();
+
+ if (tempDirectoryName.EndsWith(tempPattern))
+ {
+ match = true;
+ }
+ }
+ else if (searchPattern.Contains("*"))
+ {
+ //Nach Anfang und Ende Suchen
+ tempDirectoryName = Path.GetFileNameWithoutExtension(directoryName).ToLower();
+ tempPattern = searchPattern.Remove(searchPattern.IndexOf("*"));
+ tempPattern1 = searchPattern.Remove(0, searchPattern.IndexOf("*") + 1);
+
+ if (tempDirectoryName.StartsWith(tempPattern) & tempDirectoryName.EndsWith(tempPattern1))
+ {
+ match = true;
+ }
+ }
+ else
+ {
+ match = false;
+ }
+ }
+ catch
+ {
+ match = false;
+ }
+
+ return match;
+ }
+
+ ///
+ /// Checks how old the file is.
+ ///
+ /// A valid file name.
+ /// Days how old the element must be. 0=All.
+ /// True=Is older as 'daysOld', otherwies=false.
+ private bool DaysOld(string fileName, int daysOld)
+ {
+ int calcDays = 0;
+ bool ok = false;
+
+ if (daysOld <= 0)
+ {
+ ok = true;
+ }
+ else
+ {
+ try
+ {
+ //Das Alter (letzter Zugriff) der Datei errechnen
+ DateTime dt = System.IO.File.GetLastAccessTime(fileName);
+ TimeSpan sp = DateTime.Now - dt;
+ calcDays = sp.Days;
+
+ if (calcDays > daysOld)
+ {
+ //Wenn die Datei älter als 'daysOld'-Tage ist
+ ok = true;
+ }
+ }
+ catch
+ {
+ ok = false;
+ }
+ }
+
+ return ok;
+ }
+ #endregion
+
+ #region Event Handler
+ // Der Delegat muß die gleiche Signatur aufweisen wie die Eventhandler-Methode.
+ public delegate void EventDelegate(int result, string status);
+
+ // Das Event-Objekt ist vom Typ dieses Delegaten.
+ public event EventDelegate DelStatus;
+
+ public void OnEvent(int result, string status)
+ {
+ // Prüft ob das Event überhaupt einen Abonnenten hat.
+ if (DelStatus != null)
+ {
+ DelStatus(result, status);
+ }
+ }
+ #endregion
+ }
+}
diff --git a/Test_Delete/Form1.Designer.cs b/Test_Delete/Form1.Designer.cs
new file mode 100644
index 0000000..5368d0e
--- /dev/null
+++ b/Test_Delete/Form1.Designer.cs
@@ -0,0 +1,74 @@
+namespace Test_Delete
+{
+ partial class Form1
+ {
+ ///
+ /// Erforderliche Designervariable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Verwendete Ressourcen bereinigen.
+ ///
+ /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Vom Windows Form-Designer generierter Code
+
+ ///
+ /// Erforderliche Methode für die Designerunterstützung.
+ /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
+ ///
+ private void InitializeComponent()
+ {
+ this.buttonStart = new System.Windows.Forms.Button();
+ this.labelNumber = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // buttonStart
+ //
+ this.buttonStart.Location = new System.Drawing.Point(13, 234);
+ this.buttonStart.Name = "buttonStart";
+ this.buttonStart.Size = new System.Drawing.Size(75, 23);
+ this.buttonStart.TabIndex = 0;
+ this.buttonStart.Text = "Start";
+ this.buttonStart.UseVisualStyleBackColor = true;
+ this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click);
+ //
+ // labelNumber
+ //
+ this.labelNumber.AutoSize = true;
+ this.labelNumber.Location = new System.Drawing.Point(13, 13);
+ this.labelNumber.Name = "labelNumber";
+ this.labelNumber.Size = new System.Drawing.Size(16, 13);
+ this.labelNumber.TabIndex = 1;
+ this.labelNumber.Text = "...";
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(292, 269);
+ this.Controls.Add(this.labelNumber);
+ this.Controls.Add(this.buttonStart);
+ this.Name = "Form1";
+ this.Text = "Form1";
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button buttonStart;
+ private System.Windows.Forms.Label labelNumber;
+ }
+}
+
diff --git a/Test_Delete/Form1.cs b/Test_Delete/Form1.cs
new file mode 100644
index 0000000..27839e3
--- /dev/null
+++ b/Test_Delete/Form1.cs
@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Eugen.IO;
+
+namespace Test_Delete
+{
+ public partial class Form1 : Form
+ {
+ #region Version und Copyright
+ // Version und Copyright
+ string programName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); // Den Programmnamen auslesen
+ string version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); // Die Programmversion auslesen
+ static object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
+ string copyright = ((AssemblyCopyrightAttribute)attributes[0]).Copyright;
+ string icon = Application.StartupPath + "\\Info.bmp";
+ // Assembly Datum und Zeit
+ static DateTime value = AssemblyDateTime();
+ string date = value.ToShortDateString();
+ string time = value.ToLongTimeString();
+ // Programmversion berechnen
+ private static DateTime AssemblyDateTime()
+ {
+ var version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
+ var buildDateTime = new DateTime(2000, 1, 1).Add(new TimeSpan(TimeSpan.TicksPerDay * version.Build + TimeSpan.TicksPerSecond * 2 * version.Revision));
+ // Tage seit dem 1. Januar 2000 und Sekunden seit Mitternacht, (multiplizier mit 2 ergibt das Original)
+ return buildDateTime;
+ }
+ #endregion
+
+ public Form1()
+ {
+ InitializeComponent();
+ }
+
+ private void buttonStart_Click(object sender, EventArgs e)
+ {
+ //TODO: Hier geht es los
+ List undelFile = new List();
+ string undelDir = "";
+ List undelDirs = new List();
+ string fileName = "C:\\temp\\test.txt";
+ // string folderName = "C:\\temp";
+ string folderName = "C:\\temp\\Test";
+
+ Count count = new Count();
+
+ Delete.NumberOfFiles = count.File(folderName, "", 0, true);
+ Delete.NumberOfDirectories = count.Directory(folderName, "", 0, true, true);
+ labelNumber.Text = Delete.NumberOfFiles.ToString() + " Dateien\n" + Delete.NumberOfDirectories.ToString() + " Verzeichnisse";
+ labelNumber.Refresh();
+
+ Delete del = new Delete();
+
+ // undelFile = del.File(folderName, "", 0, true);
+ undelDir = del.Directory(folderName);
+ }
+ }
+}
diff --git a/Test_Delete/Form1.resx b/Test_Delete/Form1.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/Test_Delete/Form1.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Test_Delete/Program.cs b/Test_Delete/Program.cs
new file mode 100644
index 0000000..c97c886
--- /dev/null
+++ b/Test_Delete/Program.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Test_Delete
+{
+ static class Program
+ {
+ ///
+ /// Der Haupteinstiegspunkt für die Anwendung.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Form1());
+ }
+ }
+}
diff --git a/Test_Delete/Properties/AssemblyInfo.cs b/Test_Delete/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..d88109a
--- /dev/null
+++ b/Test_Delete/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Allgemeine Informationen über eine Assembly werden über die folgenden
+// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
+// die einer Assembly zugeordnet sind.
+[assembly: AssemblyTitle("Test_Delete")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Test_Delete")]
+[assembly: AssemblyCopyright("Copyright © 2017")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
+// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
+// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
+[assembly: ComVisible(false)]
+
+// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
+[assembly: Guid("ee2ccb92-eabe-412d-97bb-6bf7a1077413")]
+
+// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
+//
+// Hauptversion
+// Nebenversion
+// Buildnummer
+// Revision
+//
+// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
+// übernehmen, indem Sie "*" eingeben:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.*")]
+// [assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Test_Delete/Properties/Resources.Designer.cs b/Test_Delete/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..32f0deb
--- /dev/null
+++ b/Test_Delete/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// Dieser Code wurde von einem Tool generiert.
+// Laufzeitversion: 4.0.30319.42000
+//
+// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
+// der Code neu generiert wird.
+//
+//------------------------------------------------------------------------------
+
+namespace Test_Delete.Properties
+{
+
+
+ ///
+ /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
+ ///
+ // Diese Klasse wurde von der StronglyTypedResourceBuilder-Klasse
+ // über ein Tool wie ResGen oder Visual Studio automatisch generiert.
+ // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
+ // mit der Option /str erneut aus, oder erstellen Sie Ihr VS-Projekt neu.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Test_Delete.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
+ /// Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Test_Delete/Properties/Resources.resx b/Test_Delete/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/Test_Delete/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Test_Delete/Properties/Settings.Designer.cs b/Test_Delete/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..0a699b5
--- /dev/null
+++ b/Test_Delete/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Test_Delete.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Test_Delete/Properties/Settings.settings b/Test_Delete/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/Test_Delete/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/Test_Delete/Test_Delete.csproj b/Test_Delete/Test_Delete.csproj
new file mode 100644
index 0000000..865ba6b
--- /dev/null
+++ b/Test_Delete/Test_Delete.csproj
@@ -0,0 +1,84 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {EE2CCB92-EABE-412D-97BB-6BF7A1077413}
+ WinExe
+ Test_Delete
+ Test_Delete
+ v4.5.2
+ 512
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form1.cs
+
+
+
+
+ Form1.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
\ No newline at end of file