Autor Beitrag
Svenni9991
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Fr 19.10.12 14:35 
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:
ausblenden volle Höhe 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:
//Kopiervorgang
            
    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;

    //Wenn Daten im Quellordner sind, dann Kopiervorgang starten
    if (test == false)
    {
        string[] original = Directory.GetFiles(quelle, "*.*");

        // Kopieren der Dateien
        foreach (string f in original)
        {
            int zahl = 0;

            string fName = f.Substring(quelle.Length + 1);

            // Datei wird umbenannt, wenn sie bereits existiert

            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!");
            }
        }

        // Erfolgreich kopierte Daten im Eingang löschen
        foreach (string f in original)
        {
            File.Delete(f);
            o_prot.writeProtokoll("Dateien wurden im Eingang gelöscht");
        }
    }

    //Wenn keine Daten im Quellordner sind, dann nur ins Protokoll schreiben
    
    else
    {
        o_prot.writeProtokoll("Keine Dateien gefunden!");
    }

Schon einmal vielen Dank
Svenni

Moderiert von user profile iconTh69: Color durch C#-Tags ersetzt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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:
ausblenden 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!");
}

Für diesen Beitrag haben gedankt: Svenni9991
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 19.10.12 15:15 
Zitat:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: 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