Entwickler-Ecke
C# - Die Sprache - Keine Daten im Ordner - keine Ausgabe im Protokoll (if-else)
Svenni9991 - Fr 19.10.12 14:35
Titel: Keine Daten im Ordner - keine Ausgabe im Protokoll (if-else)
Hallo Leute!
Bräuchte mal dringend eure Hilfe.
Ich mache seit August eine Ausbildung zur Fachinformatikerin Anwendungsentwicklung und hab die Aufgabe bekommen ein Programm zu schreiben, welches Daten kopiert, löscht und umbenennt und nebenbei ein Protokoll schreibt.
Soweit funktioniert eigentlich auch alles, allerdings bekomme ich es mit dem if und dem else einfach nicht hin :(
Sind Daten im Ordner werden diese wie gewünscht kopiert, im Quellverzeichnis gelöscht und nebenbei wird der Ablauf in das Protokoll geschrieben. Soweit so gut.
Wenn allerdings keine Daten vorhanden sind gibt er mir im Protokoll gar nichts aus und überspringt das else einfach.
Könnt ihr mir sagen/erklären warum? Und wie ich es besser/anders machen kann? Speziell dazu habe ich nichts im Internet gefunden und ich bin am Programm ebenso an der Suche nach Lösungen schon am verzweifeln. :cry:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| bool test = File.Exists(@"C:\tmp\Testverzeichnis\QV\test");
string quelle = @"C:\tmp\Testverzeichnis\QV\Auftrag"; string ziel = C:\tmp\Testverzeichnis\ZV\2012\10.2012\auftrag;
if (test == false) { string[] original = Directory.GetFiles(quelle, "*.*");
foreach (string f in original) { int zahl = 0;
string fName = f.Substring(quelle.Length + 1);
if (!File.Exists(Path.Combine(ziel, fName))) { File.Copy(Path.Combine(quelle, fName), Path.Combine(ziel, fName)); o_prot.writeProtokoll("Die Dateien wurden erfolgreich kopiert!"); } else { while (File.Exists(Path.Combine(ziel, zahl + "_" + fName))) { zahl++; } File.Copy(Path.Combine(quelle, fName), Path.Combine(ziel, zahl + "_" + fName)); o_prot.writeProtokoll("Die Dateien existierten bereits und wurden umbenannt!"); } }
foreach (string f in original) { File.Delete(f); o_prot.writeProtokoll("Dateien wurden im Eingang gelöscht"); } }
else { o_prot.writeProtokoll("Keine Dateien gefunden!"); } |
Schon einmal vielen Dank
Svenni
Moderiert von
Th69: Color durch C#-Tags ersetzt
Th69 - Fr 19.10.12 15:12
Hallo Svenni9991 :welcome:
hast du denn schon mal mit dem Debugger überprüft, ob die Variable
test wirklich gesetzt ist?
Allerdings verstehe ich die Abfrage auf die Datei "...\test" aber auch nicht so ganz, d.h. was du damit bezwecken willst (zumindestens paßt es nicht zu deinem Kommentar "Wenn Daten im Quellordner sind, dann Kopiervorgang starten")?
Wenn du überprüfen willst, ob (keine) Daten im Ordner sind, so überprüfe einfach:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| string[] original = Directory.GetFiles(quelle, "*.*"); if (original.Length > 0) { } else { o_prot.writeProtokoll("Keine Dateien gefunden!"); } |
Ralf Jansen - Fr 19.10.12 15:15
Zitat: |
C#-Quelltext 1:
| bool test = File.Exists(@"C:\tmp\Testverzeichnis\QV\test"); | |
Hast du vielleicht die falsche Vorstellung was File.Exists macht? Wenn test ein Ordner ist prüft File.Exists nicht ob da was drin ist oder nicht sondern nur ob das übergebene Objekt existiert und den Ordner gibts vermutlich. Wenn es den Ordner gibt aber leer ist ist test also immer true und dein if wird ausgeführt aber dein foreach Konstrukt eben kein mal ausgeführt was zu einem leeren Protokol führt.
Svenni9991 - Mo 22.10.12 08:35
Viiielen Dank für die Antworten!
@ Th69: Ja die Variable ist gesetzt, der Pfad und alles ist richtig, aber es hat wohl wirklich wegen dem File.Exists nicht geklappt.
"...\test" ist in dem Fall der Quellordner in dem geguckt werden sollte ob Daten vorhanden sind oder nicht, aber das geht ja nicht. Daaanke für den Tipp mit dem "> 0". Jetzt funktioniert es auch endlich :)
@ Ralf Jansen: Ja, vermutlich. Hab das bisher dann immer so verstanden das man den Pfad zum Ordner angeben muss in dem man gucken will ob Daten drin sind oder nicht. Darum hat das alles auch nicht funktioniert. Aber jetzt weiß ich es besser :) Danke
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!