Pfad einer Datei mit dem neusten Änderungsdatum innerhalb eines Verzeichnisses ermitteln

  • Hallo an alle,

    habe folgendes Problem:

    Ich habe ein Verzeichnis in dem 10 Dateien liegen:

    wpman0.xml
    wpman1.xml
    wpman2.xml
    wpman3.xml
    wpman4.xml
    wpman5.xml
    wpman6.xml
    wpman7.xml
    wpman8.xml
    wpman9.xml

    Diese Dateien werden von einem "nicht AutoIt Programm" erstellt. Ich benötige nun eine Funktion, welche mir den Pfad der Datei zurückgibt welche zuletzt geändert wurde, also zuletzt durch das andere Programm aktualisiert wurde (fragt mich bitte nicht warum dieses Programm unterschiedliche Dateien erstellt, es würde ja theoretisch ausreichen eine Dtaei zu erstellen und diese dann immer zu aktualisieren. Nun, ist halt so :) Diese Funktionalität (das ich eben immer nur eine stets aktuelle Datei mit dem gleichen Namen im Scriptverzeichnis habe) soll mir nun ein kleines Script bereitstellen.

    Hier mein Ansatz (die XML Dtaien liegen im Ordner XML im Scriptverzeichnis)

    [autoit]


    While True
    $newestFile=_checkNewest()
    FileCopy($newestFile, @ScriptDir & "\wpman.xml", 1)
    Sleep(30000)
    WEnd
    Func _checkNewest()
    ; Diese Funktion fehlt
    Return $filePath
    EndFunc

    [/autoit]

    Vielen Dank schonmal!

    Einmal editiert, zuletzt von oliverh (6. Februar 2009 um 16:49)

  • Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <array.au3>

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

    $files = _FileListToArray(@ScriptDir, "*", 1)
    Dim $filesizes[UBound($files)][2]

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

    For $i = 1 To UBound($files)-1
    $filesizes[$i][0] = $files[$i]
    $filesizes[$i][1] = FileGetSize($files[$i])
    Next

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

    _ArrayDelete($filesizes, 0)
    _ArrayDisplay($filesizes)
    _ArraySort($filesizes, 1, 0, 0, 1)
    _ArrayDisplay($filesizes)

    [/autoit]

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • da komm ich jetzt ned mit :) du ermittelst hier die größte datei oder etwa nicht... ich brauche die "lastModified" Datei eines Verzeichnisses

  • Hups... naja dann halt so^^

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <array.au3>

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

    $files = _FileListToArray(@ScriptDir, "*", 1)
    Dim $filesizes[UBound($files)][2]

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

    For $i = 1 To UBound($files)-1
    $filesizes[$i][0] = $files[$i]
    $filesizes[$i][1] = FileGetTime($files[$i], 0, 1)
    Next

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

    _ArrayDelete($filesizes, 0)
    _ArrayDisplay($filesizes, "unsortiert")
    _ArraySort($filesizes, 1, 0, 0, 1)
    _ArrayDisplay($filesizes, "nach größe sortiert, erste element ist das neueste")

    [/autoit]

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Bekomm deine Funktion nicht in mein Script eingebaut :( Rückgabewert der Funktion soll der Pfad auf die neueste Datei sein, damit ich diese dann über FileCopy in mein Hauptverzeichnis kopieren kann...

  • Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <array.au3>

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

    MsgBox(0, "", _checkNewest(@ScriptDir))

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

    Func _checkNewest($path, $filter = "*")
    $files = _FileListToArray($path, $filter, 1)
    Dim $filesizes[UBound($files)][3]
    For $i = 1 To UBound($files)-1
    $filesizes[$i][0] = $files[$i]
    $filesizes[$i][1] = FileGetTime($files[$i], 0, 1)
    $filesizes[$i][2] = $path&"\"&$files[$i]
    Next
    _ArrayDelete($filesizes, 0)
    _ArraySort($filesizes, 1, 0, 0, 1)
    Return $filesizes[0][2]
    EndFunc

    [/autoit]

    Wobei ich dir empfehlen würde das komplette array aus der funktion zurückzugeben falls du mal dein script erweitern willst und evt. wissen willst welches die älteste datei oder so ist, also besser so:

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <array.au3>

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

    $test = _checkNewest(@ScriptDir)
    MsgBox(0, "", $test[0][2])

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

    Func _checkNewest($path, $filter = "*")
    $files = _FileListToArray($path, $filter, 1)
    Dim $filesizes[UBound($files)][3]
    For $i = 1 To UBound($files)-1
    $filesizes[$i][0] = $files[$i]
    $filesizes[$i][1] = FileGetTime($files[$i], 0, 1)
    $filesizes[$i][2] = $path&"\"&$files[$i]
    Next
    _ArrayDelete($filesizes, 0)
    _ArraySort($filesizes, 1, 0, 0, 1)
    Return $filesizes
    EndFunc

    [/autoit]

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D