FileOpenDialog() Problem

  • Ich öffne einen FileOpenDialog() und füge die Elemente die zurückkommen der Liste hinzu, da FileOpenDialog() verschiedene Sachen zurückgibt wenn ich nur 1 Element auswähle (Mehrfachauswahl ist aktiviert) muss ich jetzt vor dem Hinzufügen in die ListView das 2. Element im Array überprüfen, aber nach was überprüf ich das jetzt?

    Hier mein Code:

    [autoit]


    $FileToSave = StringSplit(FileOpenDialog("Dateien zum Sichern auswählen...", "C:\","Alle Dateien (*.*)", 4), "|");Dialog öffnen, mehrere Dateien können ausgewählt werden (4), String wird an "|" gesplittet und im Array gespeichert
    If StringLen($FileToSave[1]) > 0 Then ;Falls eine Datei ausgewählt wurde
    For $count = 1 To UBound($FileToSave) - 1
    Local $CountItems = _GUICtrlListView_GetItemCount($ListView1)
    GUICtrlCreateListViewItem(GetFileName($FileToSave[$count]), $ListView1);Dateinamen reinschreiben
    _GUICtrlListView_AddSubItem($ListView1, $CountItems, Round(FileGetSize($FileToSave[$count]) / 1000, 0) & " kByte", 1);Dateigröße bestimmen
    _GUICtrlListView_AddSubItem($ListView1, $CountItems, "File", 2);Dateityp bestimmen
    _GUICtrlListView_AddSubItem($ListView1, $CountItems, $CountItems + 1, 3);Zähler hochzählen
    Next
    EndIf

    [/autoit]

    Das Array hat 100 Felder:

    [autoit]

    Global $FileToSave[100]

    [/autoit]

    2 Mal editiert, zuletzt von CrazyAutoIT (30. Juni 2013 um 21:47)

  • Ich würde es so machen.

    Spoiler anzeigen
    [autoit]

    #include <GuiListview.au3>

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

    Global $cBrowse, $cListview, $aFiles, $sFilename, $iSize, $sSize

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

    GUICreate("Test", 350, 300)
    $cBrowse = GUICtrlCreateButton("Durchsuchen", 20, 20, 80, 25)
    $cListview = GUICtrlCreateListView("Dateiname|Größe|Typ|Zähler", 20, 60, 300, 200)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $cBrowse
    $aFiles = StringSplit(FileOpenDialog("Dateien zum Sichern auswählen...", "C:\","Alle Dateien (*.*)", 4), "|");Dialog öffnen, mehrere Dateien können ausgewählt werden (4), String wird an "|" gesplittet und im Array gespeichert
    If $aFiles[1] <> "" Then
    If $aFiles[0] = 1 Then
    $sFilename = StringTrimLeft($aFiles[1], StringInStr($aFiles[1], "\", 0, -1))
    $iSize = Round(FileGetSize($aFiles[1]) / 1000, 0)
    $sSize = $iSize & " kByte"
    If $iSize = 0 Then $sSize = "< 1 kByte"
    GUICtrlCreateListViewItem($sFilename & "|" & $sSize & "|File|" & _GUICtrlListView_GetItemCount($cListview) + 1, $cListview)
    Else
    For $i = 2 To $aFiles[0]
    $iSize = Round(FileGetSize($aFiles[1] & "\" & $aFiles[$i]) / 1000, 0)
    $sSize = $iSize & " kByte"
    If $iSize = 0 Then $sSize = "< 1 kByte"
    GUICtrlCreateListViewItem($aFiles[$i] & "|" & $sSize & "|File|" & _GUICtrlListView_GetItemCount($cListview) + 1, $cListview)
    Next
    EndIf
    EndIf
    EndSwitch
    WEnd

    [/autoit]


    Es reicht, wenn du das Array als ganz normale variable erstellst, ohne Arrayangabe. Da die Größe ja StringSplit bestimmt.

  • Was verstehst du denn jetzt an dem bisschen Code nicht? Wozu eigentlich der Zähler?

  • [autoit]

    $sFilename = StringTrimLeft($aFiles[1], StringInStr($aFiles[1], "\", 0, -1))

    [/autoit]

    Ich versteh nicht was diese Zeile macht.

    [autoit]

    Wozu eigentlich der Zähler?

    [/autoit]

    Nur so als Info, wieso?

  • StringInStr sucht von rechts das erste Auftreten von dem Backslash. Diese Position nimmt er dann als Anzahl für StringTrimLeft zum kürzen.

    Nur so als Info, wieso?


    Achso. Macht man das nicht als erste Spalte? Und dann heißt das Position und nicht Zähler?

  • Zitat

    StringInStr sucht von rechts das erste Auftreten von dem Backslash. Diese Position nimmt er dann als Anzahl für StringTrimLeft zum kürzen.

    Achso, okay. Danke :)

    Zitat

    Achso. Macht man das nicht als erste Spalte? Und dann heißt das Position und nicht Zähler?

    Könnte man natürlich auch machen, stimmt...