Problem mit Auflistungs und Ausgabe Skript

  • Hallo

    das Skript soll folgendes machen

    alle Bilder in einem Ordner suchen, den Pfad auflisten und mit hilfe von getjpgsize.au3 (1) die größe raussuchen.

    und das alles in ne Text/csv Datei schreiben

    nur leider bricht er bei 3/4 immer ab ohne Fehler, er ist seiner Meinung einfach fertig :(

    (2) mein Programm

  • Hi,

    ganz schön kompliziert.

    Wäre das nicht auch eine bzw eine einfachere Lösung?:

    Spoiler anzeigen
    [autoit]

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

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

    dim $file = FileOpen(@ScriptDir & "\picpath.txt",2)
    dim $path = @ScriptDir

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

    searchpics("*.jpg")
    searchpics("*.jpeg")
    searchpics("*.bmp")
    searchpics("*.png")
    searchpics("*.gif")

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

    FileClose($file)

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

    func searchpics($p)
    dim $ary = _FileListToArray($path,$p,1)
    for $i = 1 to UBound($ary) -1
    FileWrite($file,$path & "\" & $ary[$i] & " (" & FileGetSize($ary[$i])/1000 & " kb)" & @CRLF)
    Next
    EndFunc

    [/autoit]

    Hab nur "fix" was getestet :D

    Gruß
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Hallo

    Wäre das nicht auch eine bzw eine einfachere Lösung?:


    Gier fehlt zum einen die Rekursion zum anderen ermittelst du die Dteigrösse und nicht die Abmessungen der Bilder. Hier die Lösung mit Rekursion und Bildbmessungen:

    Spoiler anzeigen
    [autoit]

    #include<Array.au3>
    #include <getjpegsize.au3>

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

    $sPath = 'D:\Dokumente und Einstellungen\Bert\Eigene Dateien' ;anpassen

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

    $ret = _GetFilesFolder_Rekursiv($sPath, 'jpg', 0, 0)
    If IsArray($ret) Then
    _ArrayDisplay($ret, 'Rekursiv alle jpg-Dateien')
    $file = FileOpen(@ScriptDir & "\test.csv", 2)
    If $file = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf
    For $i = 1 To $ret[0]
    FileWrite($file, $i & ";" & $ret[$i] & ";")
    $img_size = _GetJpegSize($ret[$i])
    if IsArray($img_size) Then
    FileWrite($file,$img_size[0] & " x " & $img_size[1] & @CRLF)
    Else
    FileWrite($file,"Grösse nicht feststellbar!" & @CRLF)
    EndIf
    Next
    FileClose($file)
    Else
    MsgBox(0, 'keine Dteien gefunden', $ret & @CRLF)
    EndIf

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

    ;AUFLISTUNGSFUNKTION
    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt = '*', $iDir = -1, $iRetType = 0, $sDelim = '0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath), $sExt, $iDir, $sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc ;==>_GetFilesFolder_Rekursiv

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

    Func _ShowSubFolders($Folder, $Ext = '*', $Dir = -1, $Delim = @CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc ;==>_ShowSubFolders

    [/autoit]

    mfg autoBert