Neuste Dateien zuerst speichern

  • Hallo,

    ich brauch mal einen Denkanstoß, wie ich folgendes realisieren kann.

    Es werden Bilder von z.B. einer Speicherkarte eingelesen. Maximale Anzahl der zu speichernden Bilder sind z.b. 20.
    D.h. sind jetzt z.B. 10 Bilder mit Dateiname_01.jpg bis Dateiname_10.jpg vorhanden und es werden weitere
    eingelesen, sollen die neuen ab _01 eingelesen werden und die bereits vorhandenen entsprechende
    umbenannt. Die jeweils ältesten über _20 werden dann gelöscht.

  • Hallo,

    Etwas schwer das ganze nachzuvollziehen aber vielleicht hilf ja folgender Gedanke/Ablauf:

    • Alle Dateinamen aus der Speicherkarte auslesen (in eine Array,ohne Pfad --> Siehe Befehl _PathSplit und _FileListToArray)
    • (Array ablaufen) Überprüfen ob der Name im Array im Zielort vorhanden ist
      • Nein: FileCopy von Speicherkarte nach Zielort
      • Ja: Neuen Namen generieren (_PathSplit,StringMid,StringTrimRight etc.) (_XX +10 ; Maximum ist dabei auf _20)
        • FileCopy von Zielort nach Zielort mit neuem Namen (mit FC_OVERWRITE, dann muss man die über _20 nicht löschen)
        • FileCopy von Speicherkarte nach Zielort


    Wenn du bereits etwas geschrieben hast, könnte man daran weiterarbeiten aber ich hoffe das hilft

  • Ok. Ich versuche es nochmal ;)

    Es soll eine Speicherkarte mit Bildern eingelesen und gespeichert werden.
    Dabei sollen es immer maximal 20 Bilder sein die gespeichert werden im
    Format xx_01.jpg bis xx_20.jpg. Zum Beispiel wird beim ersten Einlesen 5 Bilder
    ganz normal gespeichert von xx_01.jpg bis xx_05.jpg. Irgendwann soll dann nochmal
    für den selben Dateinamen xx erneut z.b. 6 Bilder eingelesen werden. NUN sollen aber
    die bereits vorhanden Bilder xx_01.jpg bis xx_05.jpg nach hinten "verschoben" werden
    also nach xx_07.jpg bis xx_12.jpg und die neu eingelesen wieder mit xx_01.jpg
    bis xx_06.jpg. Und sollte irgendwann wieder neu eingelesen werden, soll alles
    über _20.jpg gelöscht bzw. nicht mehr "verschoben" werden.

    Bissher hatte ich mit _FileListToArray($aArray[$i] & $pfad, "*.jpg", 1) die Dateien
    eingelesen und einfach hinten dran gehängt ab wo die nächste Zahl frei war, nachdem
    ich das vorher geprüft hatte.

    2 Mal editiert, zuletzt von ..:Dude:.. (8. Januar 2015 um 17:48)

  • Ok. Hab es jetzt so gelöst, dass ich alle vorhandenen und die neuen zu kopierenden Bilder an einen Ort verschiebe,
    dann alles in ein Array mit Dateidatum, dass ganze nach Datum sortiere und dann wieder an
    den richtigen Ort anhand der Array kopiere und die Dateien entsprechend benenne.

  • Das mit dem Zwischenspeicherort ist zwar nicht schön, aber solange es funktioniert :D
    (Etwas Code zum anschauen wäre trotzdem nett gewesen)
    Hoffe geholfen zu haben.

  • OK ;) Hier, mal grob wie es im ersten Entwurf als Test klappt.

    [autoit]


    $kundennummer = "107850"
    $Zufall = Random(000000000,999999999,1)

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

    FileMove("d:\temp\bildtest\2\*.jpg","d:\temp\bildtest\zusammen\" & $Zufall & "\",9)
    FileMove("d:\temp\bildtest\1\*.jpg","d:\temp\bildtest\zusammen\" & $Zufall & "\",9)

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

    Local $FileList = _FileListToArray("d:\temp\bildtest\zusammen\" & $Zufall & "\", "*.jpg",1)

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

    Global $aFileList2D[$FileList[0] + 1][2] = [[$FileList[0]]]

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

    For $i = 1 To $FileList[0]
    $aFileList2D[$i][0] = $FileList[$i]
    $aFileList2D[$i][1] = FileGetTime("d:\temp\bildtest\zusammen\" & $Zufall & "\" & $FileList[$i], 0, 1)
    Next

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

    _ArraySort($aFileList2D, 1, 1, 0, 1)

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

    if $FileList[0] >= 21 then
    $Anzahl_max = 20
    Else
    $Anzahl_max = $FileList[0]
    EndIf

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

    For $i = 1 To $Anzahl_max
    filemove("d:\temp\bildtest\zusammen\" & $Zufall & "\" & $aFileList2D[$i][0],"d:\temp\bildtest\s-bilder\" & $kundennummer & "_" & $i & ".jpg")
    Next
    DirRemove("d:\temp\bildtest\zusammen\" & $Zufall & "\")

    [/autoit]