Datei liste aus Lisview übernehmen neue erzeugen und aktuellste datei anzeigen?

  • Hallo,

    ich möchte gerne die Dateiliste aus einer Listview in einer anderen listview items Erzeugen und die Aktuellste datei in den verzeichnissen anzeigen lassen,
    aber irgendwie läuft er in einer Schleife zeigt immer die Gleiche an was mache ich falsch?

    So sieht in etwa listview1 aus:
    c:\ordner\test.1
    c:\ordner\test.2
    c:\ordner\test.3
    c:\ordner\test.4
    c:\ordner\test.5
    c:\ordner\test.6
    c:\ordner\test.7
    c:\ordner\test.8
    c:\ordner\test.9
    c:\ordner\test.10
    c:\ordner\test.11
    c:\ordner1\test.1
    c:\ordner1\test.2
    c:\ordner1\test.3
    c:\ordner1\test.4
    c:\ordner1\test.5
    c:\ordner1\test.6
    c:\ordner1\test.7
    c:\ordner1\test.8
    c:\ordner1\test.9
    c:\ordner1\test.10
    c:\ordner1\test.11

    dann will ich die Aktuellste datei darstellen in listview2:

    c:\ordner1\test.4
    c:\ordner\test.2


    Hier mein Code:


    [autoit]

    Func _checknewest()
    _GUICtrlListView_DeleteAllItems($LVNP)
    Local $icount = _GUICtrlListView_GetItemCount($LV)

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

    For $i = 0 To $icount - 1
    $ListViewText = _GUICtrlListView_GetItemTextArray($LV, $i)

    $ListViewText[1] = StringLeft($ListViewText[1], StringInStr($ListViewText[1], '\', 0, -1))

    $aFilelist = _FileListToArray($imagepath & $ListViewText[1])
    Dim $aFiledate[$aFilelist[0]+1]
    For $i = 1 To $aFilelist[0]
    $aFiledate[$i] = FileGetTime($imagepath & $ListViewText[1] & '\' & $aFilelist[$i], 0, 1)

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

    GUICtrlCreateListViewItem($ListViewText[1] & $aFilelist[_ArrayMaxIndex($aFiledate, 1)], $LVNP)

    Next
    Next
    EndFunc

    [/autoit]

    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    Einmal editiert, zuletzt von subzero007 (13. August 2009 um 17:38)

  • in $file[$index][0] machste den Dateinamen rein
    in $file[$index][1] machste FileGetTime als String rein

    Dann _ArraySort($file, 1, 0,0,1), dann sollte die aktuellste Datei oben stehn

    MFG FireFlyer

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

  • Hey,

    ich habe nicht genau verstanden was ich da falsch habe und was ich ändern soll?

    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Spoiler anzeigen
    [autoit]

    Func _checknewest()
    _GUICtrlListView_DeleteAllItems($LVNP)
    Local $icount = _GUICtrlListView_GetItemCount($LV)

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

    For $i = 0 To $icount - 1
    $ListViewText = _GUICtrlListView_GetItemTextArray($LV, $i)

    $ListViewText[1] = StringLeft($ListViewText[1], StringInStr($ListViewText[1], '\', 0, -1))

    $aFilelist = _FileListToArray($imagepath & $ListViewText[1])
    ; nö machen wir nicht so --> Dim $aFiledate[$aFilelist[0]+1] sondern:
    Dim $aFiles[Ubound($aFilelist)-1][2]
    For $i = 1 To Ubound($aFiles)-1
    $aFiles[$i][0] = $aFilelist[$i]
    $aFiles[$i][1] = FileGetTime($imagepath & $ListViewText[1] & '\' & $aFilelist[$i], 0, 1)
    ;dann noch nicht gleich in die ListView reinmachen sondern vorher erst sortieren
    Next
    ;sortieren
    _ArraySort($aFiles, 1, 0, 0, 1)
    ;Jetzt kann mans wieder einfügen
    For $i = 1 To Ubound($aFiles)-1
    GUICtrlCreateListViewItem($ListViewText[1] & $aFiles[$i], $LVNP)
    Next
    Next
    EndFunc

    [/autoit]

    MFG FireFlyer

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

  • Hey,

    jetzt kriege ich folgende meldung :

    ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    GUICtrlCreateListViewItem($ListViewText[1] & $aFiles[$i], $LVNP)
    GUICtrlCreateListViewItem($ListViewText[1] & ^ ERROR

    Eine idee?

    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hey,

    [autoit]

    Func _checknewest()
    _GUICtrlListView_DeleteAllItems($LVNP)
    Local $icount = _GUICtrlListView_GetItemCount($LV)

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

    For $i = 0 To $icount - 1
    $ListViewText = _GUICtrlListView_GetItemTextArray($LV, $i)

    $ListViewText[1] = StringLeft($ListViewText[1], StringInStr($ListViewText[1], '\', 0, -1))

    $aFilelist = _FileListToArray($imagepath & $ListViewText[1])
    ; nö machen wir nicht so --> Dim $aFiledate[$aFilelist[0]+1] sondern:
    Dim $aFiles[Ubound($aFilelist)-1][2]
    For $i = 1 To Ubound($aFiles)-1
    $aFiles[$i][0] = $aFilelist[$i]
    $aFiles[$i][1] = FileGetTime($imagepath & $ListViewText[1] & '\' & $aFilelist[$i], 0, 1)
    ;dann noch nicht gleich in die ListView reinmachen sondern vorher erst sortieren
    Next
    ;sortieren
    _ArraySort($aFiles, 1, 0, 0, 1)
    _ArrayDisplay($aFiles)
    ;Jetzt kann mans wieder einfügen
    For $i = 1 To Ubound($ListViewText[1] & $aFiles)-1
    GUICtrlCreateListViewItem($ListViewText[1] & $aFiles[$i], $LVNP)
    Next
    Next
    EndFunc

    [/autoit]

    Habe jetzt so weit das wein Script nicht abstürtzt aber passieren tut auch nichts
    habe ein _arraydisplay gemacht leider ohne erfolg.
    es öffnet sich ein fenster mit werten das war es dann auch und mann kann arraydisplay auch nicht mehr schliessen....

    Eine idee?

    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Upps...
    Und jetzt ???
    Habe ich noch nie gemacht wie komme ich jetzt zum ziel??

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    • Offizieller Beitrag

    Hier hast du das Array befüllt:

    [autoit]

    $aFiles[$i][0] = $aFilelist[$i]
    $aFiles[$i][1] = FileGetTime($imagepath & $ListViewText[1] & '\' & $aFilelist[$i], 0, 1)

    [/autoit]


    und hier brauchst du einen Wert davon für das ListView:
    GUICtrlCreateListViewItem($ListViewText[1] & $aFiles[$i][0], $LVNP)

  • Hey,

    jetzt Stürtzt mein Script nicht mehr ab aber. auch nicht das ergebniss was ich haben wollte:

    [autoit]

    Func _checknewest()
    _GUICtrlListView_DeleteAllItems($LVNP)
    Local $icount = _GUICtrlListView_GetItemCount($LV)

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

    For $i = 0 To $icount - 1
    $ListViewText = _GUICtrlListView_GetItemTextArray($LV, $i)

    $ListViewText[1] = StringLeft($ListViewText[1], StringInStr($ListViewText[1], '\', 0, -1))

    $aFilelist = _FileListToArray($imagepath & $ListViewText[1])
    ; nö machen wir nicht so --> Dim $aFiledate[$aFilelist[0]+1] sondern:
    Dim $aFiles[Ubound($aFilelist)-1][2]
    For $i = 1 To Ubound($aFiles)-1
    $aFiles[$i][0] = $aFilelist[$i]
    $aFiles[$i][1] = FileGetTime($imagepath & $ListViewText[1] & '\' & $aFilelist[$i], 0, 1)
    ;dann noch nicht gleich in die ListView reinmachen sondern vorher erst sortieren
    Next
    ;sortieren
    _ArraySort($aFiles, 1, 0, 0, 1)
    ;_ArrayDisplay($aFiles)
    ;Jetzt kann mans wieder einfügen
    For $i = 1 To Ubound($aFiles)-1
    GUICtrlCreateListViewItem($ListViewText[1] & $aFiles[$i][0], $LVNP)
    Next
    Next
    EndFunc

    [/autoit]

    Er erstellt mir in meine zweite listview die einträge 2 bis 6 von der Listview 1
    Eine Idee?
    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • BugFix
    Das mit dem error war ich -.- hab da wohl grad en bisschen gepennt ^^

    @Zero
    naja wo hier der fehler liegt kann man nur schwer nachvollziehen dazu solltest du schon dein ganzes script posten

    MFG FireFlyer

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

    • Offizieller Beitrag

    Ohne den genauen Inhalt von $LV zu kennen, würde ich sagen so:

    Spoiler anzeigen
    [autoit]


    Func _checknewest()
    Local $icount, $sNewest, $iNewest
    _GUICtrlListView_DeleteAllItems($LVNP)
    If StringRight($imagepath, 1) <> '\' Then $imagepath &= '\'
    $icount = _GUICtrlListView_GetItemCount($LV)
    For $i = 0 To $icount - 1
    $ListViewText = _GUICtrlListView_GetItemText($LV, $i)
    $aImageList = _FileListToArray($imagepath & $ListViewText, '*', 1)
    If Not @error Then
    $sNewest = '0000/00/00'
    $iNewest = 0
    For $j = 1 To $aImageList[0]
    $sDate = StringRegExpReplace(FileGetTime($imagepath & $ListViewText & '\' & $aImageList[$j], 0, 1), '(\d{4})(\d{2})(\d{2}).+', '$1/$2/$3')
    If $sDate > $sNewest Then
    $sNewest = $sDate
    $iNewest = $j
    EndIf
    Next
    GUICtrlCreateListViewItem($imagepath & $ListViewText & '\' & $aImageList[$iNewest], $LVNP)
    EndIf
    Next
    EndFunc ;==>_checknewest

    [/autoit]
  • Hey,
    irgendwie passiert garnichts mehr???

    [autoit]

    _arraydisplay

    [/autoit]


    Springt auch nicht an was ist los?


    [autoit]

    Func _checknewest()
    Local $icount, $sNewest, $iNewest
    _GUICtrlListView_DeleteAllItems($LVNP)
    If StringRight($imagepath, 1) <> '\' Then $imagepath &= '\'
    $icount = _GUICtrlListView_GetItemCount($LV)
    For $i = 0 To $icount - 1
    $ListViewText = _GUICtrlListView_GetItemText($LV, $i)
    $aImageList = _FileListToArray($imagepath & $ListViewText, '*', 1)
    _ArrayDisplay($aImageList)
    If Not @error Then
    $sNewest = '0000/00/00'
    $iNewest = 0
    For $j = 1 To $aImageList[0]
    $sDate = StringRegExpReplace(FileGetTime($imagepath & $ListViewText & '\' & $aImageList[$j], 0, 1), '(\d{4})(\d{2})(\d{2}).+', '$1/$2/$3')
    If $sDate > $sNewest Then
    $sNewest = $sDate
    $iNewest = $j
    EndIf

    Next
    GUICtrlCreateListViewItem($imagepath & $ListViewText & '\' & $aImageList[$iNewest], $LVNP)
    EndIf
    Next
    EndFunc

    [/autoit]


    Eine idee?

    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."