From a08a68fda3d323df045b8bdd7063b48b3d215d3d Mon Sep 17 00:00:00 2001 From: Hoeglinger Eugen Date: Thu, 6 Jul 2017 11:50:15 +0200 Subject: [PATCH] =?UTF-8?q?Projektdateien=20hinzuf=C3=BCgen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Test_Delete.sln | 22 + Test_Delete/App.config | 6 + Test_Delete/Count.cs | 571 ++++++++++++++ Test_Delete/Delete.cs | 754 +++++++++++++++++++ Test_Delete/Form1.Designer.cs | 74 ++ Test_Delete/Form1.cs | 67 ++ Test_Delete/Form1.resx | 120 +++ Test_Delete/Program.cs | 22 + Test_Delete/Properties/AssemblyInfo.cs | 36 + Test_Delete/Properties/Resources.Designer.cs | 71 ++ Test_Delete/Properties/Resources.resx | 117 +++ Test_Delete/Properties/Settings.Designer.cs | 30 + Test_Delete/Properties/Settings.settings | 7 + Test_Delete/Test_Delete.csproj | 84 +++ 14 files changed, 1981 insertions(+) create mode 100644 Test_Delete.sln create mode 100644 Test_Delete/App.config create mode 100644 Test_Delete/Count.cs create mode 100644 Test_Delete/Delete.cs create mode 100644 Test_Delete/Form1.Designer.cs create mode 100644 Test_Delete/Form1.cs create mode 100644 Test_Delete/Form1.resx create mode 100644 Test_Delete/Program.cs create mode 100644 Test_Delete/Properties/AssemblyInfo.cs create mode 100644 Test_Delete/Properties/Resources.Designer.cs create mode 100644 Test_Delete/Properties/Resources.resx create mode 100644 Test_Delete/Properties/Settings.Designer.cs create mode 100644 Test_Delete/Properties/Settings.settings create mode 100644 Test_Delete/Test_Delete.csproj 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