none
If Then Routine läuft ins leere RRS feed

  • Frage

  • Hallo,

    irgendwie habe ich einen Knoten im Hirn, jedenfalls brauche ich mal wieder Hilfe.
    Mein Programm prüft bei jedem Strart, ob alle erforderlichen Verzeichnisse vorhanden sind und soll für den Fall, dass ein Verzeichnis fehlt dies melden und vorschlagen das Verzeichnis neu anzulegen.

    Insgesamt habe ich im extremfall 63 Verzeichnisse. Die Zahl hängt davon ab, ob ich den dazugehörigen Variablen einen Namen gegeben habe.

    Heisst der erste Ordner = "Ordner1" oder ist das Namensfeld leer ="" soll auch kein Verzeichnis erzeugt werden
    Das hat auch soweit geklapp so lange es noch gar keine Einträge im Zielverzeichnis gab.
    Wurden alle Ordner angelegt und einer manuell von mir entfernt, wurde der beim nächste mal nicht wieder erzeugt.

    Aktuell habe ich es mit folgendem Code versucht:

    If

     

    Ordner60 = "S60" Or Ordner60 = "" Or Directory.Exists(ZielVerzeichnis & Ordner60) Then

     

    'nichts

    MsgBox(

    "Ordner60: " & ZielVerzeichnis & Ordner60 & " existiert")

     

    Else

    MsgBox(ZielVerzeichnis & Ordner60 &

    " wird angelegt")

    MkDir(ZielVerzeichnis & Ordner60)

     

    End If

    Dabei habe ich nun folgende Ergebnisse:

    Zunächst werden alle Ordner die es geben soll auch angelegt, die, die nicht erzeugt werden sollen gibt es auch nicht.
    Lösche ich nun z.B. Ordner 10 und aus dem Zielverzeichnis und starte das Programm neu, bekomme ich beim aktuellen Code noch für den ersten bestehenden Ordner angezeigt, dass er existiert und dann nichts mehr. Als ob der Rest der Routine gar nicht existieren würde.
    Wo liegt mein Fehler?

    Stefan


    Liebe Grüße Stefan
    Samstag, 15. August 2009 01:03

Antworten

  • Hallo Stefan,

    wie ich sehe, war Dir mein Vorschlag von letztens noch etwas viel - versuchen wir es mal mit einem kleineren Schritt.

    Um Dir die Anlage zu erleichtern erstelle Dir eine kleine Funktion.
    Wenn ich das oben richtig interpretiere, könnte die so aussehen:
      'Public Shared ZielVerzeichnis As String = "...."
    
        Public Shared Function VerzeichnisAnlage(ByVal ordnerName As String, ByVal vorgabeName As String) As Boolean
            ' Kein Verzeichnisname oder Vorgabe => auslassen
            If Not String.IsNullOrEmpty(ordnerName) AndAlso ordnerName <> vorgabeName Then
                Dim pfad As String = IO.Path.Combine(ZielVerzeichnis, ordnerName)
                If IO.Directory.Exists(pfad) Then
                    MsgBox("Ordner60: " & pfad & " existiert bereits.")
                    Return True
                Else
                    Try
                        IO.Directory.CreateDirectory(pfad)
                        MessageBox.Show(pfad & " wurde angelegt.")
                        Return True
    
                    Catch ex As Exception
                        MessageBox.Show(pfad & " konnte nicht angelegt werden:" & Environment.NewLine & ex.Message)
                    End Try
                End If
            End If
            Return False
        End Function
    Die kannst Du dann 63 Mal (oder so oft Du magst) aufrufen
    VerzeichnisAnlage(Ordner60, "S60")
    VerzeichnisAnlage(Ordner61, "S61")
    VerzeichnisAnlage(Ordner62, "S62")

    (Und später, wenn das doch mal ein Dictionary werden sollte, es in eine Schleife umbauen.)

    Gruß Elmar
    • Als Antwort markiert Giftzwockel Montag, 17. August 2009 17:06
    Samstag, 15. August 2009 19:00
    Beantworter

Alle Antworten

  • Hallo Stefan,

    wäre es nicht einfacher 63 mal zu prüfen ob ein Verzeichnis nicht existiert als umgekehrt?

    Schöne Grüße aus Berlin
    Oliver
    Samstag, 15. August 2009 08:53
  • Hallo Oliver,

    vielleicht ist das ja der Knoten.
    Macht das ausser der Komplexität des Codes einen Unterschied?
    Wenn meine Code stimmt, müsste ja dasselbe rauskommen.
    Egal, ich probiers mal anders rum.
    Liebe Grüße Stefan
    Samstag, 15. August 2009 12:39
  • Hallo Stefan,

    es war zumindestens das erste was mir bei Deinem Code aufgefallen ist. Wenn es nichts bringt, können wir uns immer noch etwas anderes überlegen.

    Schöne Grüße
    Oliver
    Samstag, 15. August 2009 15:26
  • Hallo Stefan,

    wie ich sehe, war Dir mein Vorschlag von letztens noch etwas viel - versuchen wir es mal mit einem kleineren Schritt.

    Um Dir die Anlage zu erleichtern erstelle Dir eine kleine Funktion.
    Wenn ich das oben richtig interpretiere, könnte die so aussehen:
      'Public Shared ZielVerzeichnis As String = "...."
    
        Public Shared Function VerzeichnisAnlage(ByVal ordnerName As String, ByVal vorgabeName As String) As Boolean
            ' Kein Verzeichnisname oder Vorgabe => auslassen
            If Not String.IsNullOrEmpty(ordnerName) AndAlso ordnerName <> vorgabeName Then
                Dim pfad As String = IO.Path.Combine(ZielVerzeichnis, ordnerName)
                If IO.Directory.Exists(pfad) Then
                    MsgBox("Ordner60: " & pfad & " existiert bereits.")
                    Return True
                Else
                    Try
                        IO.Directory.CreateDirectory(pfad)
                        MessageBox.Show(pfad & " wurde angelegt.")
                        Return True
    
                    Catch ex As Exception
                        MessageBox.Show(pfad & " konnte nicht angelegt werden:" & Environment.NewLine & ex.Message)
                    End Try
                End If
            End If
            Return False
        End Function
    Die kannst Du dann 63 Mal (oder so oft Du magst) aufrufen
    VerzeichnisAnlage(Ordner60, "S60")
    VerzeichnisAnlage(Ordner61, "S61")
    VerzeichnisAnlage(Ordner62, "S62")

    (Und später, wenn das doch mal ein Dictionary werden sollte, es in eine Schleife umbauen.)

    Gruß Elmar
    • Als Antwort markiert Giftzwockel Montag, 17. August 2009 17:06
    Samstag, 15. August 2009 19:00
    Beantworter
  • Hallo Oliver,

    nicht das ich das Problem aus den Augen verloren hätte - wie könnte ich auch ;-) - nö, ich war einfach mal weg.
    Zunächst habe ich das mit 63 mal auf nicht Vorhandensein geprüft, das hat aber nicht den gewünschten erfolg gebracht.
    Dein Code da unten sieht für mich viel versprechend aus. Und ganz nebenbei lerne ich das mit einem Rückgabewert.
    Danke.
    Liebe Grüße Stefan
    Montag, 17. August 2009 17:03