Probleme mit Variablen in Funktion "FileExists"

  • Hallo Forum,

    ich habe ein kleines Problem mit der Funktion "FileExists".
    Sobald ich innerhalb der Anweisung der Funktion "FileExists" Variablen verwende,
    werden diese augenscheinlich nicht korrekt, bzw gar nicht interpretiert.

    Hier der Codeschnipsel (AutoIt Version: 3.2.10.0):

    If FileExists(@MyDocumentsDir & "\AutoLogon.ini") Then
    Run(@WindowsDir & "\notepad.exe")
    Else
    MsgBox(0, "Script", "Datei fehlt. Bye!")
    EndIf

    Ersetze ich die Variable @MyDocumentsDir durch den tatsächlichen Pfad funktioniert das:

    If FileExists("c:\documents and Settings\user123\my documents\AutoLogon.ini") Then
    Run(@WindowsDir & "\notepad.exe")
    Else
    MsgBox(0, "Script", "Datei fehlt. Bye!")
    EndIf


    Andere Versuche wie z.B.

    If FileExists(@UserProfileDir & "\my documents\AutoLogon.ini\") Then oder
    ...

    $var = @MyDocumentsDir & "\AutoLogon.ini"
    If FileExists($var) "Then
    ...

    schlugen ebenfalls fehl.

    Kann mir jemand sagen, was ich falsch mache?


    Schon mal vielen Dank!

    Liebe Grüße,
    Duckbone

    3 Mal editiert, zuletzt von Duckbone (17. Januar 2008 um 12:50)

  • Hallo peethebee,

    ja, die Variable @MyDocumentsDir entspricht dem Pfad c:\documents and Settings\user123\my documents. Es soll dort geprüft werden, ob die Datei AutoLogin.ini vorhanden ist. Das Ergbnis der MsgBox verweist auf den korrekten Pfad.

    Batchmässig würde das so aussehen:

    if exist %Userprofile%\"my documents"\AutoLogon.ini %windir%\notepad.exe

    Grüße,
    Duckbone

    Einmal editiert, zuletzt von Duckbone (11. Januar 2008 um 21:24)

  • also ich weiß nicht, aber einmal schreibst du die Datei AutoLogin.ini oder dann wieder so autologin.ini - musst dich für eins entscheiden

  • also ich weiß nicht, aber einmal schreibst du die Datei AutoLogin.ini oder dann wieder so autologin.ini - musst dich für eins entscheiden


    :D ja....*peinlich*, es geht natürlich um die Datei AutoLogon.ini (Hab das gleich mal korrigiert).

    Aber das eigentliche Problem ist, daß wenn ich eben die Variable @UserProfileDir oder auch @MyDocumentsDir verwende, diese nicht aufgelöst werden.

    Verwende ich diese Variabalen z.B. in einer MsgBox, dann werden die korrekten Results angezeigt.

    Trage ich den absoluten Pfad ohne Variable in die Funktion "FileExists" ein, dann klappt es!

    Es ist für mich aber wichtig innerhalb der Funktion "FileExists" mit Variablen zu arbeiten.

    Mache ich da was falsch, oder geht das einfach so nicht?


    Grüssle,

    Duckbone

    Einmal editiert, zuletzt von Duckbone (11. Januar 2008 um 22:41)

  • Moin,

    funktioniert tadellos ...

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    $path = @MyDocumentsDir
    $files = _FileListToArray($path, '*.*', 1)
    If @error Then
    MsgBox(4112, 'Error', 'Errorcode: ' & @error)
    Else
    For $i = 1 To $files[0]
    If FileExists($path & '\' & $files[$i]) Then
    MsgBox(0, '', $path & '\' & $files[$i] & @CRLF & _
    @CRLF & '... geht doch ... ;)')
    ElseIf Not FileExists($path & '\' & 'foo.bar') Then
    MsgBox(0, 'Error', 'Datei ' & $path & '\' & _
    'foo.bar existiert nicht! :(')
    EndIf
    Next
    EndIf
    $path = @UserProfileDir
    $files = _FileListToArray($path, '*.*', 1)
    If @error Then
    MsgBox(4112, 'Error', 'Errorcode: ' & @error)
    Else
    For $i = 1 To $files[0]
    If FileExists($path & '\' & $files[$i]) Then
    MsgBox(0, '', $path & '\' & $files[$i] & @CRLF & _
    @CRLF & '... geht doch ... ;)')
    ElseIf Not FileExists($path & '\' & 'foo.bar') Then
    MsgBox(0, 'Error', 'Datei ' & $path & '\' & _
    'foo.bar existiert nicht! :(')
    EndIf
    Next
    EndIf

    [/autoit]

    Gruß
    Greenhorn


    • Offizieller Beitrag

    Hi,
    es kann durchaus passieren (warum weiß ich auch nicht ;)), dass:

    [autoit]

    If FileExists(@MyDocumentsDir)

    [/autoit]

    ein anderes Ergebnis liefert als

    [autoit]

    $path = @MyDocumentsDir
    If FileExists($path)

    [/autoit]


    Möglicherweise ist die Makro-Auflösung innerhalb eines Funktionsaufrufes nicht immer zuverlässig.