Netzwerkordner prüfen

  • Hallo Zusammen,

    ich möchte gerne den Pfad "//Server/Ordner" prüfen, ob dieser vorhanden ist.

    Wenn ich nun aber zum "ersten Mal" nach dem Computerstart den Pfad mit FileExists($Ziel_Pfad) abprüfe, dauert dieses ewig, bis er mir sagt, dass der Pfad nicht existiert.
    Existiert der Pfad, geht es schneller. Keine Ahnung warum. Gibt es noch eine andere Möglichkeit so etwas zu prüfen?
    Ich habe es schon mit Ping versucht, aber hier kann ich - soweit ich weiß - nur den Computernamen prüfen, aber nicht den Pfad, oder?
    Zumindest geht es bei mir nicht.

    Also mit FileExists ist es sehr langsam, wenn man noch nie im Netzwerk war. Hat man es einmal geprüft, geht es innerhalb von einer halben Sekunde. Ansonsten gerne auch 4 Sekunden.
    Also? Wie mach ich es richtig und schneller? :D

    Lieben Gruß, Anna

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

    Einmal editiert, zuletzt von AnnaM (4. November 2012 um 11:09)

  • Also ich will gerade folgendes machen: Das Programm soll in gewissen Abständen im Hintergrund einen gewissen Pfad prüfen, ob dieser nun vorhanden und ansprechbar ist oder nicht.
    Im Moment löse ich es so:

    [autoit][/autoit][autoit][/autoit][autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    $Form1 = GUICreate("Form1", 177, 62, 192, 124)
    $Input1 = GUICtrlCreateInput("", 24, 16, 121, 21)
    GUISetState(@SW_SHOW)

    [/autoit][autoit][/autoit][autoit]

    $Ziel_Pfad = "\\Server\Ordner\Ordner"
    AdlibRegister("AdlibCheckZiel", 1000)

    [/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit][autoit][/autoit][autoit]

    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func AdlibCheckZiel()

    [/autoit][autoit][/autoit][autoit]

    GUICtrlSetData($Input1,"prüfe...")
    $DriveSpace = Round(DriveSpaceFree($Ziel_Pfad & "\"),4)
    If $DriveSpace <> 0 Then
    AdlibUnRegister("AdlibCheckZiel")
    GUICtrlSetData($Input1,"Ziel gefunden")
    Else
    GUICtrlSetData($Input1,"kein Ziel")
    EndIf

    [/autoit][autoit][/autoit][autoit]

    EndFunc ;==>AdlibCheckZiel

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]

    Also ich habe euch einfach einmal eine TestForm gebaut. Immer wenn der prüft, ist die GUI nicht mehr zu benutzen. Und das sollte ja nicht sein.
    Ich weiß nicht, wie hier überhaupt Multithreading eingesetzt werden kann?! Das $DriveSpace brauche ich für die spätere Berechnung und daher nehme ich es jetzt anstatt FileExists.
    Ich hoffe, da hat einer eine geniale Idee, wie ich es hier besser umsetzen kann.

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:


  • Ich weiß nicht, wie hier überhaupt Multithreading eingesetzt werden kann?!

    Garnicht. Autoit ist nicht dafür ausgelegt. Ich zitiere da einfach mal progandy:

    Zitat

    Diese Möglichkeit des Multithreadings ist aus gutem Grund in der Versenkung verschwunden. Der AutoIt-Interpreter ist nicht threadsicher. Das bedeutet, dass er nicht mehrere Codeblöcke gleichzeitig ausführen kann, da interene Variablen und Speicherbereiche nicht für gleichzeitige Zugriffe ausgelegt sind. Dadurch gibt es unvorhersehbare Interferenzen der Threads, die meist aufgrund von Speicherfehlern oder öhnlichem zum Absurz führen. Weiterhin beendet der AutoIt-Compiler das Programm sobald der erste Thread beendet wird.

    Siehe dazu auch die AutoitNotOnToDoList: http://www.autoitscript.com/trac/autoit/wi…ItNotOnToDoList

    Das was du willst lässt sich nur lösen in dem das Prüfen des Pfades in ein externes Script auslagerst.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    Einmal editiert, zuletzt von chip (30. Oktober 2012 um 23:31)