using System; using System.Configuration; using System.IO; using System.Linq; using System.Threading.Tasks; namespace FSI.Lib.Guis.Pdf.Mgt { public class Cmds { public static Task DelDirectoriesAsync(string path) { return Task.Factory.StartNew(() => { Action DelPath = null; DelPath = p => { Directory.EnumerateFiles(p).ToList().ForEach(System.IO.File.Delete); // Dateien im Verzeichnis löschen Directory.EnumerateDirectories(p).ToList().ForEach(DelPath); Directory.EnumerateDirectories(p).ToList().ForEach(Directory.Delete); // Verzeichnis löschen }; if (Directory.Exists(path)) { string[] directories = Directory.GetDirectories(path); // Alle Unterverzeichniss auslesen foreach (string directory in directories) { if (!(directory.Replace(path, "")).StartsWith(".")) // Überprüfen ob Verzeichnis mit "." startet { DelPath(directory); // Unterverzeichnisse inkl. Dateien löschen Directory.Delete(directory); // Verzeichnis löschen } } } }); } public static Task DelFilesAsync(string path) { return Task.Factory.StartNew(() => { var files = Directory.GetFiles(path); foreach (string file in files) { FileInfo fileInfo = new FileInfo(file); const int STR_LENGTH = 27; // min. Dateinamen Länge (Zahlen inkl. Bindestriche) if (!fileInfo.Name.StartsWith(".")) // Überprüfen ob Datei mit "." startet { if (fileInfo.Extension != ".pdf" || fileInfo.Name.Length <= STR_LENGTH) // Überprüfen ob es sich um eine PDF-Datei handelt { System.IO.File.Delete(fileInfo.FullName); // ... wenn nicht Datei löschen } else { string[] fileStrings = fileInfo.Name.Substring(0, STR_LENGTH - 1).Split('-'); // Zahlenblock splitten für Überprüfung if (fileStrings.Length == 3) // 3 Zahlenblöcke vorhanden? { if (fileStrings[0].Length != 10 || !Int64.TryParse(fileStrings[0], out _) || fileStrings[1].Length != 10 || !Int64.TryParse(fileStrings[1], out _) || fileStrings[2].Length != 4 || !Int64.TryParse(fileStrings[2], out _)) // Länge der Zahlenblöcke überprüfen { System.IO.File.Delete(fileInfo.FullName); // ..., wenn Länge nicht passt, Datei löschen } } else { System.IO.File.Delete(fileInfo.FullName); // ..., wenn nicht Datei löschen } } } } }); } public static Task CreatePdfShortcutsAsync(string path) { return Task.Factory.StartNew(() => { var files = Directory.GetFiles(path, "*.pdf"); // alle PDF-Dateien einlesen foreach (var file in files) { FileInfo fileInfo = new FileInfo(file); string[] fileStrings = System.IO.Path.GetFileNameWithoutExtension(fileInfo.Name).Split(' '); // Datei-Namen für Verzeichnis Bezeichnung aufteilen string tmpPath = path + fileStrings[1] + " " + fileStrings[2]; // Verzeichnis Bezeichnung zusammenstellen if (Convert.ToBoolean(ConfigurationManager.AppSettings["SubDir"])) // mit/ohne Unterverzeichnis { tmpPath = path + fileStrings[1] + @"\" + fileStrings[2]; // mit Unterverzeichnis } else { tmpPath = path + fileStrings[1] + " " + fileStrings[2]; // ohne Unterverzeichnis } Directory.CreateDirectory(tmpPath); // Verzeichnis erstellen // Shortcut erstellen if (Convert.ToBoolean(ConfigurationManager.AppSettings["WithNo"])) { LnkParser.ShortCut.Create(System.IO.Path.GetFileNameWithoutExtension(tmpPath + "\\" + fileInfo.Name), tmpPath, fileInfo.FullName, System.IO.Path.GetFileNameWithoutExtension(fileInfo.FullName)); } else { LnkParser.ShortCut.Create(System.IO.Path.GetFileNameWithoutExtension(fileInfo.Name.Replace(fileStrings[0], "")), tmpPath, fileInfo.FullName, System.IO.Path.GetFileNameWithoutExtension(fileInfo.FullName)); } } }); } } }