D-Ani Geschrieben 8. Juli 2013 Teilen Geschrieben 8. Juli 2013 Mahlzeit, wie man im Thema > c# Console - Datensicherung mit .csv Input (Quelle/Ziel) < lesen kann schreibe ich derzeit ein Tool das mir alle Dateien kopieren soll. Theoretisch wäre ich fertig, aber ich habe Probleme damit z.b. E:\, D:\ oder C:\ als Source anzugeben und anschließend zu kopieren. Alles andere funktioniert soweit wenn es sich in einem Ordner befindet, aber was bringt ein Sicherungstool wenn es bei einer Platte versagt? Das ist die Fehlermeldung: Eine Ausnahme (erste Chance) des Typs "System.UnauthorizedAccessException" ist in mscorlib.dll aufgetreten. Ich habe schon ein paar Variante versucht, aber irgendwie übersehe ich was und hoffe Ihr könnt mir einen Tipp geben :-) VS selbst habe ich mit der Release Exe als Admin versucht, aber auch das führte bisweilen nicht zum gewünscht ergebnis :-( using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Diagnostics; using System.Threading; namespace SaveMe { class Program { private static string[] values; static void Main(string[] args) { // Angabe Ziel und Quellverzeichnis & Error Log string source = @GetApplicationsPath() + "config.txt"; string eLogD = @GetApplicationsPath() + "ErrorLog.txt"; // Zeitstempel DateTime today = DateTime.Now; // Angaben und Erfolgsausgabe(n) string waitfile = ("Bitte warten... Die Sicherung der Dateien von "); string waitfileb = (" nach "); string waitfilec = (" wird aktuell erstellt!"); string waitpath = ("Bitte warten... Die Sicherung der Verzeichnisse "); string waitpathb = (" nach "); string waitpathc = (" wird aktuell erstellt!"); string succ = ("Die Sicherung der Dateien war Erfolgreich.\n"); // Fehlerausgabe(n) string cd = (DateTime.Now + " Die Configdatei (" + source + ") existiert nicht!\n"); // Abfrage ob Configdatei existiert... if (File.Exists(source)) { StreamReader sr = new StreamReader(source); string inputLine = (""); int i = 0; while ((inputLine = sr.ReadLine()) != null) { i++; values = inputLine.Split(new Char[] { ';' }); for (int j = 0; j < values.Length; j++) { string ez = values[j]; } string csvsource = values[0]; string csvtarget = values[1]; DirectoryInfo ParentDirectory = new DirectoryInfo(csvsource); string dne = (DateTime.Now + " Das angegebene Verzeichnis (" + csvsource + ") existiert nicht!\n"); string zws = (DateTime.Now + " Es ist nicht genug Speicher vorhanden damit die Datei vollständig gelesen werden kann!\n"); string dwng = (DateTime.Now + " Die Datei(en) wurde(n) nicht gefunden!\n"); string kzgb = (DateTime.Now + " Keine Zugriffsberechtigung im Zielordner (" + csvtarget + ")! Entfernen Sie den Schreib- und/oder Leseschutz der zu überschreibenden Datei oder benennen Sie die Datei um!\n"); string sf = (DateTime.Now + " Ein nicht bedachter Fehler ist aufgetreten...!\n"); string up = (DateTime.Now + " Das Format des angegebenen Pfades ist Ungültig!\n"); string dpizl = (DateTime.Now + " Der eingetragene Pfad oder Dateiname ist zu lang.\nAuf Windows-Plattformen dürfen Pfade nicht länger als 247 Zeichen und Dateinamen nicht länger als 259 Zeichen sein.\n"); string au = (DateTime.Now + " Eines der Argumente ist ungültig!\n"); string ea = (DateTime.Now + " Ein E/A Fehler ist aufgetreten!\n"); try { // Wertausgabe // int pathLen = csvsource.Length +1; // Suchen, Kombinieren und Überschreiben der Pfade foreach (string d in Directory.GetDirectories(csvsource, "*", SearchOption.AllDirectories)) { string subPath = d.Substring(3); string newpath = Path.Combine(csvtarget, subPath); Directory.CreateDirectory(newpath); DirectoryInfo DI = new DirectoryInfo(newpath); DI.Attributes = FileAttributes.Normal; // Bitte Warten Ausgabe Console.WriteLine(waitpath + d + waitpathb + newpath + waitpathc); } // Suchen, Kombinieren und Überschreiben der Dateien mit den Pfaden foreach (string f in Directory.GetFiles(csvsource, "*", SearchOption.AllDirectories)) { string subPath = f.Substring(3); string newpath = Path.Combine(csvtarget, subPath); string test = Path.GetDirectoryName(newpath); //Console.WriteLine(test); if (!Directory.Exists(test)) { Directory.CreateDirectory(test); DirectoryInfo DI = new DirectoryInfo(test); DI.Attributes = FileAttributes.Normal; } File.Copy(f, newpath, true); File.SetAttributes(newpath, FileAttributes.Normal); // Bitte Warten Ausgabe Console.WriteLine(waitfile + f + waitfileb + newpath + waitfilec); } // Sicherung Erfolgreich Ausgabe Console.WriteLine(succ); } catch (OutOfMemoryException) { // Fehlerausgabe Zu wenig Speicher... File.AppendAllText(eLogD, zws); Console.WriteLine(zws); Console.ReadLine(); } catch (FileNotFoundException) { // Fehlerausgabe Datei existiert nicht... File.AppendAllText(eLogD, dwng); Console.WriteLine(dwng); Console.ReadLine(); } catch (UnauthorizedAccessException) { // Fehlerausgabe Zugriffsrechte auf das Zielverzeichnis unzureichend... File.AppendAllText(eLogD, kzgb); Console.WriteLine(kzgb); Console.ReadLine(); } catch (NotSupportedException) { // Fehlerausgabe Methode wird nicht unterstützt... File.AppendAllText(eLogD, up); Console.WriteLine(up); Console.ReadLine(); } catch (PathTooLongException) { // Fehlerausgabe angegebener Pfad ist zu lang... File.AppendAllText(eLogD, dpizl); Console.WriteLine(dpizl); Console.ReadLine(); } catch (DirectoryNotFoundException) { // Fehlerausgabe Quellverzeichnis existiert nicht... File.AppendAllText(eLogD, dne); Console.WriteLine(dne); Console.ReadLine(); } catch (ArgumentException) { // Fehlerausgabe eines falschen Arguments... File.AppendAllText(eLogD, au); Console.WriteLine(au); Console.ReadLine(); } catch (IOException) { // Fehlerausgabe E/A Fehler... File.AppendAllText(eLogD, ea); Console.WriteLine(ea); Console.ReadLine(); } catch (Exception) { // Fehlerausgabe sonstige Fehler... File.AppendAllText(eLogD, sf); Console.WriteLine(sf); Console.ReadLine(); } } } else { // Fehlerausgabe Configdatei existiert nicht... File.AppendAllText(eLogD, cd); Console.WriteLine(cd); } } public static string GetApplicationsPath() { return Thread.GetDomain().BaseDirectory; } } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SilentDemise Geschrieben 8. Juli 2013 Teilen Geschrieben 8. Juli 2013 Der User, unter dem das tool ausgeführt wird, muss leserechte auf die entsprechenden Verzeichnisse und Platten haben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
D-Ani Geschrieben 8. Juli 2013 Autor Teilen Geschrieben 8. Juli 2013 Aye dem stimme ich zu und ich denke diesbezüglich sollte ich als Admin der laut Anzeige "Vollzugriff" hat auf die Platten das Tool ohne Probleme ausführen. Funktioniert aber nicht. Auch nicht die Möglichkeit > Eigenschaften > Programm als Administrator ausführen. Auf diesem Rechner gibt es nur Vollzugriff, nichts abgespecktes. Das Problem tritt auch nur auf wenn ich z.b. E:\ D:\ als Quelle angebe...Mache ich ein E:\Verzeichnis D:\Quelle z.b. das nach C:\backup kopiert werden soll, habe ich keine Probleme. Das läuft einwandfrei durch. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
HJST1979 Geschrieben 9. Juli 2013 Teilen Geschrieben 9. Juli 2013 Hallo wenn E:\ und D:\ Netzwerkverzeichnisse sind kann es doch durchaus sein, dass du als LOKALER Administrator auf diesen Verzeichnissen keine Lese / Schreibrechte hast. Auf den Unterverzeichnissen wiederrum kann es wieder anders aussehen. Gruß Hans-Jörg Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
D-Ani Geschrieben 9. Juli 2013 Autor Teilen Geschrieben 9. Juli 2013 Ne das sind Platten/Partitionen auf "Frida". C:\ und E:\ Partitionen und D:\ eine eigene Platte. Ich habe jetzt vorläufig eine Abfrage if File.Exists(csvsource) und Directory.Exists mit eingebaut was die Fehlerquote mit der Ändern von GetDirectorys & GetFiles sind nun statt Get ein Enumerate was mir möglich machte die z.b. volume Ordner auch kopiert und nicht daran stirbt. Aber irgendwas gibt es noch was mir eine System.UnauthorizedAccess wirft Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
HJST1979 Geschrieben 9. Juli 2013 Teilen Geschrieben 9. Juli 2013 Evtl. versteckte / geschützte Dateien die nicht kopiert werden dürfen, auf der jeweiligen Platte ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
D-Ani Geschrieben 9. Juli 2013 Autor Teilen Geschrieben 9. Juli 2013 Noch mehr Versteckt und Geschützt als Recycle.bin und Volume System Inf & Co auf einer nicht vom System verwendeten Platte? Ausser meinen zu Testzwecken verwendeten Dateien ist "Sichtbar" nichts darauf. Wenn ich an die anderen versteckten usw. ran komme sollte ich doch eigentlich an den Rest auch ran kommen!? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 9. Juli 2013 Teilen Geschrieben 9. Juli 2013 Welche Rechte hat denn das Verzeichnis? Sonst erteile mal Vollzugriff für "Jeder". Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
D-Ani Geschrieben 12. Juli 2013 Autor Teilen Geschrieben 12. Juli 2013 Ich habe darüber Sinnfrei überlegt und das DirectoryInfo ParentDirectory = new DirectoryInfo(csvsource); heraus kommentiert... Nun funktioniert es scheinbar wie ich es wollte. Auf die Idee kam ich beim Studium der system.io.directory Seite. Scheinbar ist zuviel Info manchmal einfach hinderlich. Sollte jemand der NSA sagen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
D-Ani Geschrieben 22. Juli 2013 Autor Teilen Geschrieben 22. Juli 2013 War natürlich ein Scherz das es das war... :floet: Ich bin inzwischen soweit gediehen das ich bei einem Fehler wie z.b. UnauthorizedAccessExeption keinen komplett Abbruch habe. Das Programm springt dann zum nächsten Ordner weiter. Allerdings verstehe ich immer noch nicht warum ich da auf mir unbekanntes keinen Zugriff habe. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.VisualBasic; using System.Diagnostics; using System.Threading; namespace SaveMe { class Program { private static string[] values; static void Main(string[] args) { // Angabe Ziel und Quellverzeichnis & Error Log string source = @GetApplicationsPath() + "config.txt"; string eLogD = @GetApplicationsPath() + "ErrorLog.txt"; // Zeitstempel DateTime today = DateTime.Now; // Angaben und Erfolgsausgabe(n) string waitfile = ("Bitte warten... Die Sicherung der Dateien von "); string waitfileb = (" nach "); string waitfilec = (" wird aktuell erstellt!"); string waitpath = ("Bitte warten... Die Sicherung der Verzeichnisse "); string waitpathb = (" nach "); string waitpathc = (" wird aktuell erstellt!"); string succ = ("Die Sicherung der Dateien war Erfolgreich.\n"); // Fehlerausgabe(n) string cd = (DateTime.Now + " Die Configdatei (" + source + ") existiert nicht!\n"); string dne2 = (DateTime.Now + " Die Datei oder das zu kopierende Verzeichnis existiert nicht!\n"); // Abfrage ob Configdatei existiert... if (File.Exists(source)) { StreamReader sr = new StreamReader(source); string inputLine = (""); int i = 0; while ((inputLine = sr.ReadLine()) != null) { i++; values = inputLine.Split(new Char[] { ';' }); for (int j = 0; j < values.Length; j++) { string ez = values[j]; } string csvsource = values[0]; string csvtarget = values[1]; string dne = (DateTime.Now + " Das angegebene Verzeichnis (" + csvsource + ") existiert nicht!\n"); string zws = (DateTime.Now + " Es ist nicht genug Speicher vorhanden damit die Datei vollständig gelesen werden kann!\n"); string dwng = (DateTime.Now + " Die Datei(en) wurde(n) nicht gefunden!\n"); string kzgb = (DateTime.Now + " Hinweis: Keine Zugriffsberechtigung! (" + csvsource + ") Entfernen Sie den Schreib- und/oder Leseschutz der zu überschreibenden Datei oder benennen Sie die Datei um!\n"); string sf = (DateTime.Now + " Ein nicht bedachter Fehler ist aufgetreten...!\n"); string up = (DateTime.Now + " Das Format des angegebenen Pfades ist Ungültig!\n"); string dpizl = (DateTime.Now + " Der eingetragene Pfad oder Dateiname ist zu lang.\nAuf Windows-Plattformen dürfen Pfade nicht länger als 247 Zeichen und Dateinamen nicht länger als 259 Zeichen sein.\n"); string au = (DateTime.Now + " Eines der Argumente ist ungültig!\n"); string ea = (DateTime.Now + " Ein E/A Fehler ist aufgetreten!\n"); string fidc = (DateTime.Now + " Die Configurationsdatei (" + source + ") darf keine leeren Zeilen enthalten! Initialisierung des BackUp's war daher leider nicht möglich oder nur teilweise erfolgreich\n"); if (File.Exists(csvsource) | Directory.Exists(csvsource)) { try { // Suchen, Kombinieren und Überschreiben der Pfade foreach (string d in Directory.EnumerateDirectories(csvsource, "*", SearchOption.AllDirectories)) { string subPath = d.Substring(3); string newpath = Path.Combine(csvtarget, subPath); Directory.CreateDirectory(newpath); //Bitte Warten Ausgabe Console.WriteLine(waitpath + d + waitpathb + newpath + waitpathc); } // Suchen, Kombinieren und Überschreiben der Dateien mit den Pfaden foreach (string f in Directory.EnumerateFiles(csvsource, "*", SearchOption.AllDirectories)) { string subPath = f.Substring(3); string newpath = Path.Combine(csvtarget, subPath); string test = Path.GetDirectoryName(newpath); //Console.WriteLine(test); if (!Directory.Exists(test)) { Directory.CreateDirectory(test); } File.Copy(f, newpath, true); File.SetAttributes(newpath, FileAttributes.Normal); // Bitte Warten Ausgabe Console.WriteLine(waitfile + f + waitfileb + newpath + waitfilec); } // Sicherung Erfolgreich Ausgabe Console.WriteLine(succ); } catch (OutOfMemoryException) { // Fehlerausgabe Zu wenig Speicher... File.AppendAllText(eLogD, zws); Console.WriteLine(zws); } catch (FileNotFoundException) { // Fehlerausgabe Datei existiert nicht... File.AppendAllText(eLogD, dwng); Console.WriteLine(dwng); } catch (UnauthorizedAccessException) { // Fehlerausgabe Zugriffsrechte auf das Zielverzeichnis unzureichend... File.AppendAllText(eLogD, kzgb); Console.WriteLine(kzgb); } catch (NotSupportedException) { // Fehlerausgabe Methode wird nicht unterstützt... File.AppendAllText(eLogD, up); Console.WriteLine(up); } catch (PathTooLongException) { // Fehlerausgabe angegebener Pfad ist zu lang... File.AppendAllText(eLogD, dpizl); Console.WriteLine(dpizl); } catch (DirectoryNotFoundException) { // Fehlerausgabe Quellverzeichnis existiert nicht... File.AppendAllText(eLogD, dne); Console.WriteLine(dne); } catch (ArgumentException) { // Fehlerausgabe eines falschen Arguments... File.AppendAllText(eLogD, au); Console.WriteLine(au); } catch (IOException) { // Fehlerausgabe E/A Fehler... File.AppendAllText(eLogD, ea); Console.WriteLine(ea); } catch (IndexOutOfRangeException) { // Fehlerausgabe Fehler in der Configdatei File.AppendAllText(eLogD, fidc); Console.WriteLine(fidc); } catch (Exception) { // Fehlerausgabe sonstige Fehler... File.AppendAllText(eLogD, sf); Console.WriteLine(sf); } } else { File.AppendAllText(eLogD, dne2); Console.WriteLine(dne2); } } // Ende While - Orientierungspunkt } else { // Fehlerausgabe Configdatei existiert nicht... File.AppendAllText(eLogD, cd); Console.WriteLine(cd); } } public static string GetApplicationsPath() { return Thread.GetDomain().BaseDirectory; } } } Die Frage ist nun WAS ist das und WIE kann ich das "überspringen" oder kopieren wie den Rest?!? :confused: Ich bin Admin - VS wird Admin ausgeführt und die .exe wird als Admin ausgeführt, aber immer den "batscher" auf die Finger Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
D-Ani Geschrieben 22. Juli 2013 Autor Teilen Geschrieben 22. Juli 2013 Ich kam gerade auf die gloreiche Idee mir mal den Fehler in der Konsole anzusehen und bin überrascht: System.Unauthorized... Der Zugriff auf den Pfad D:\System Volume Information wurde verweigert. bei System.IO.__Error.WinIOErorror(int32 errorCode, String maybeFullPath) bei System.IO.FileSystemEnumerableIterator'1.AddSearchableDirsToStack(SearchData localSearchData) bei System.IO.FileSystemEnumerableIterator'1.MoveNext() bei...[]...Zeile 78 (foreach (string d in Directory.EnumerateDirectories(csvsource, "*", SearchOption.AllDirectories))) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 22. Juli 2013 Teilen Geschrieben 22. Juli 2013 Bspw. eine Extension-Methode schreiben, die die Exception abfängt und statt dessen einen Boolean-Wert zurück gibt. public static class DirectoryInfoExtensions { public static bool IsAuthorized(this DirectoryInfo self) { try { var directorySecurity = self.GetAccessControl(); return true; } catch (UnauthorizedAccessException ex) { return false; } } } Benutzung: var directoryInfo = new DirectoryInfo(root); var directories = directoryInfo.GetDirectories(); foreach (var directory in directories) { if (!directory.IsAuthorized()) { Console.WriteLine(directory.FullName); } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 22. Juli 2013 Teilen Geschrieben 22. Juli 2013 (bearbeitet) EDIT: Der Beitrag hier war Blödsinn :-) Bearbeitet 22. Juli 2013 von lbm1305 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
D-Ani Geschrieben 22. Juli 2013 Autor Teilen Geschrieben 22. Juli 2013 Ich habe mich schon gefragt was ich mit den Extensions soll Aber ich überlege gerade folgende Variante abzufragen bool isReadOnly = ((File.GetAttributes(csvsource oder f) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly); bool isHidden = ((File.GetAttributes(csvsource oder f) & FileAttributes.Hidden) == FileAttributes.Hidden); bool isArchive = ((File.GetAttributes(csvsource oder f) & FileAttributes.Archive) == FileAttributes.Archive); bool isSystem = ((File.GetAttributes(csvsource oder f) & FileAttributes.System) == FileAttributes.System); Sollte mir theoretisch alles derartiges bei einer If Abfrage raus filtern... aber davor ist blöd und danach ist blöd... Wie Frage ich also etwas ab das noch nicht bekannt ist? Ich kenn nun nichts in c# das mir via boolschen Wert aufzeigt ob ich Zugriff habe oder nicht!? Wäre das davor/danach Problem nicht könnte... könnte man dies via einfache IF Abfrage lösen... Gibt es keine Möglichkeit das Tool als System laufen zu lassen? (Wie ich inzwischen erlaß kann man als Admin auf die SVI nicht zugreifen auch wenn lieb bettelst) Dann sollte ich ja automatisch keine Probleme mehr haben. Theopraktisch!? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 22. Juli 2013 Teilen Geschrieben 22. Juli 2013 Dein Code wird noch unleserlicher mit dem Konstrukt. Einfacher wäre bei der Varante mit dem Attribute: if (directory.Attributes == FileAttributes.Directory) { } else { Console.WriteLine(directory.FullName); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
D-Ani Geschrieben 22. Juli 2013 Autor Teilen Geschrieben 22. Juli 2013 Unleserlich? Ich weiß in c# schreibt man das irgendwie in Klassen usw. auseinander scheinbar, aber wie Anfangs erwähnt komm ich eigentlich aus der php Ecke und die ist "lockerer" als c-sharp :floet: Ja die einfache Attribut Variante habe ich schon von oben nach unten, links bis rechts durchprobiert und stelle nur fest das ich bei der Suche im Prinzip vor der foreach Schleife nichts prüfen kann, weil noch nicht vorhanden und danach kann ich mir es ersparen weil der Ordner schon erfasst wurde und die Exception wirft. Ich komm mir gerade vor als müsste ich das Rätsel von Huhn und Ei lösen... :upps Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 22. Juli 2013 Teilen Geschrieben 22. Juli 2013 In die Zukunft sehen kann keine Programmier / Skiptsprache. Selbst PHP nicht. Vor dir haben genug Leute ähnliche Probleme gehabt und haben diese auch gelöst. Warum solltest Du also das Rad neu erfinden müssen? Ich möchte mal behaupten, dass dein Entwurt einfach bescheiden ist. Wenn man durch eine Collection iteriert, dann fragt man das gerade aktuelle Objekte ab und führe dann ggf. Operationen durch. Was man machen kann: Man holt sich nur valide Objekte in die Collection und arbeitet diese dann ab. Hier muss aber auch eine Prüfung stattfinden, welche Ordner valide sind und welche nicht. Und dafür gibt es genug Lösungen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
D-Ani Geschrieben 22. Juli 2013 Autor Teilen Geschrieben 22. Juli 2013 Nun das hier ist meine bereinigte Version. Stand aktuell ohne alles was es meines erachtens nicht mehr braucht. Was die Fehlermeldung allgemein betrifft da hast Du Recht das haben viele andere bereits gelöst, aber indem Sie einen Bogen drum herum gemacht haben. Mein Ansatz heute war eigentlich die Rechte zu erlangen auch dort kopieren zu können, so das ich ein wirklich komplettes BackUp erstellen kann! Nun mal sehen vielleicht bekomme ich noch irgendwie meine System Rechte rein using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Security.AccessControl; using System.Diagnostics; using System.Threading; namespace SaveMe { class Program { private static string[] values; static void Main(string[] args) { // Angabe Ziel und Quellverzeichnis & Error Log string source = @GetApplicationsPath() + "config.txt"; string eLogD = @GetApplicationsPath() + "ErrorLog.txt"; // Fehlerausgabe(n) und Erfolgsausgabe(n) string waitfile = ("Bitte warten... Die Sicherung der Verzeichnisse und Dateien von "); string waitfileb = (" nach "); string waitfilec = (" wird aktuell erstellt!"); string cd = (DateTime.Now + " Die Configdatei (" + source + ") existiert nicht!\n"); string dwng = (DateTime.Now + " Die Datei(en) oder das/die Verzeichnis(se) existiert nicht!\n"); // Abfrage ob Configdatei existiert... if (File.Exists(source)) { StreamReader sr = new StreamReader(source); string inputLine = (""); int i = 0; while ((inputLine = sr.ReadLine()) != null) { i++; values = inputLine.Split(new Char[] { ';' }); for (int j = 0; j < values.Length; j++) { string ez = values[j]; } string csvsource = values[0]; string csvtarget = values[1]; string dne = (DateTime.Now + " Das angegebene Verzeichnis (" + csvsource + ") existiert nicht!\n"); string zws = (DateTime.Now + " Es ist nicht genug Speicher vorhanden damit die Datei vollständig gelesen werden kann!\n"); string kzgb = (DateTime.Now + " Hinweis: Keine Zugriffsberechtigung! (" + csvsource + ") Entfernen Sie den Schreib- und/oder Leseschutz der zu überschreibenden Datei oder benennen Sie die Datei um!\n"); string sf = (DateTime.Now + " Ein nicht bedachter Fehler ist aufgetreten...!\n"); string up = (DateTime.Now + " Das Format des angegebenen Pfades ist Ungültig!\n"); string dpizl = (DateTime.Now + " Der eingetragene Pfad oder Dateiname ist zu lang.\nAuf Windows-Plattformen dürfen Pfade nicht länger als 247 Zeichen und Dateinamen nicht länger als 259 Zeichen sein.\n"); string au = (DateTime.Now + " Eines der Argumente ist ungültig!\n"); string ea = (DateTime.Now + " Ein E/A Fehler ist aufgetreten!\n"); string fidc = (DateTime.Now + " Die Configurationsdatei (" + source + ") darf keine leeren Zeilen enthalten! Initialisierung des BackUp's war daher leider nicht möglich oder nur teilweise erfolgreich\n"); if (File.Exists(csvsource) | Directory.Exists(csvsource)) { try { // Suchen, Kombinieren und Überschreiben der Dateien mit den Pfaden foreach (string f in Directory.EnumerateFiles(csvsource, "*", SearchOption.AllDirectories)) { string subPath = f.Substring(3); string newpath = Path.Combine(csvtarget, subPath); string test = Path.GetDirectoryName(newpath); if (!Directory.Exists(test)) { Directory.CreateDirectory(test); } File.Copy(f, newpath, true); File.SetAttributes(newpath, FileAttributes.Normal); // Bitte Warten Ausgabe Console.WriteLine(waitfile + f + waitfileb + newpath + waitfilec); } } catch (OutOfMemoryException oome) { File.AppendAllText(eLogD, zws + oome + "\n"); } catch (UnauthorizedAccessException uac) { File.AppendAllText(eLogD, kzgb + uac + "\n"); } catch (NotSupportedException nse) { File.AppendAllText(eLogD, up + nse + "\n"); } catch (PathTooLongException ptle) { File.AppendAllText(eLogD, dpizl + ptle + "\n"); } catch (DirectoryNotFoundException dnfe) { File.AppendAllText(eLogD, dne + dnfe + "\n"); } catch (ArgumentException ae) { File.AppendAllText(eLogD, au + ae + "\n"); } catch (IOException ioe) { File.AppendAllText(eLogD, ea + ioe + "\n"); } catch (IndexOutOfRangeException ioore) { File.AppendAllText(eLogD, fidc + ioore + "\n"); } catch (Exception e) { File.AppendAllText(eLogD, sf + e + "\n"); } } else { File.AppendAllText(eLogD, dwng + "\n"); Console.WriteLine(dwng); } } // Ende While - Orientierungspunkt } else { File.AppendAllText(eLogD, cd + "\n"); Console.WriteLine(cd); } } public static string GetApplicationsPath() { return Thread.GetDomain().BaseDirectory; } } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.