FTP LIstToArray, nur mp3 Files Listen

  • Hallo, ich habe hier ein kleines Script zum Downloaden von MP3 Datein vin meinem Server

    Nun sind in dem Verzeichniss auch andere Dateien, es sollen aber nur "*.mp3" Dateien in der FileListe auftauchen.

    Hier mal des Script:

    wäre schön wenn mir hier jemand weiter helfen könnte

    Gruß Rene

  • Hallo GerhardSchr,

    Zitat

    _ArraySearch

    Findet einen Eintrag in einem 1-dimensionalen oder 2-dimensionalen Array

    Zitat

    _ArrayFindAll

    Findet die Indizes mit allen Vorkommen einer Suchabfrage zwischen zwei Punkten in einem 1-dimensionalen oder 2-dimensionalen Array

    Quelle: dt. Hilfe

    mfg autoBert

  • Und ich bin immer noch der Meinung:
    Warum erst Informationen im Speicher bunkern welche eh nie gebraucht werden und danach wieder rausgefiltert werden anstatt gleich beim Einlesen nur das zu nehmen was man wirklich braucht?
    Warum nicht damit?:

    Spoiler anzeigen
    [autoit]

    #include <ftpEx.au3>
    #include <array.au3>

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

    $server = 'ftp.csx.cam.ac.uk'
    $username = ''
    $pass = ''

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

    $hFTP = _FTP_Open('FTP_open')
    $hFTPCon = _FTP_Connect($hFTP, $server, $username, $pass)

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

    $aFileList = _FTP_ListToArray2($hFTPCon, "pub/information/courses/perl/", "*.zip", 1)
    _ArrayDisplay($aFileList)

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

    ; #FUNCTION# ======================================================================================
    ; Name ..........: _FTP_FileList()
    ; Description ...: Listet alle Dateien und Ordner in allen Ebenen eines FTP-Pfades
    ; Syntax ........: _FTP_FileList(Const $hConn[, $sPath = ""])
    ; Parameters ....: Const $hConn - Handle zu einer offenen FTP-Verbindung. (z.B. mit FTP_Open)
    ; $sPath - [optional] Ordnerpfad auf dem Server welcher durchsucht werden soll (default:"")
    ; $sPattern - Dateinamensfilterung anhand von WildCards (* und ?)
    ; Const $iFlag - 1=nur Dateien, 2=nur Ordner, 3=Dateien+Ordner
    ; $iSplitFlag - Siehe Parameter "flag" bei StringSplit()
    ; Return values .: Success: Array mit Datei/Ordnernamen
    ; Failure: Setzt @error = 1 und Array[0] = -1
    ; Author ........: AspirinJunkie
    ; Related .......: #include <ftpEx.au3>
    ; =================================================================================================
    Func _FTP_ListToArray2(Const $hConn, $sPath = "", $sPattern = "*", Const $iFlag = 3, Const $iSplitFlag = 0)
    Local $sRet = ""
    Local $hFFFF, $aNext, $i

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

    If StringRight($sPath, 1) = "/" Then $sPath = StringTrimRight($sPath, 1)
    Local Const $aReplace[3][2] = [[".", "\."],["*", ".*"],["?", "."]]
    For $i = 0 To 2
    $sPattern = StringReplace($sPattern, $aReplace[$i][0], $aReplace[$i][1])
    Next

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

    $aNext = _FTP_FindFileFirst($hConn, $sPath, $hFFFF)
    If @error Then
    Local $Ret[1] = [-1]
    Return SetError(1, @error, $Ret)
    EndIf

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

    If (BitAND($aNext[1], 16) And BitAND($iFlag, 2)) Or ((Not BitAND($aNext[1], 16)) And BitAND($iFlag, 1)) Then
    If StringRegExp($aNext[10], $sPattern) Then $sRet &= $aNext[10] & "|"
    EndIf

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

    Do
    $aNext = _FTP_FindFileNext($hFFFF)
    If @error Then ExitLoop
    If (BitAND($aNext[1], 16) And BitAND($iFlag, 2)) Or ((Not BitAND($aNext[1], 16)) And BitAND($iFlag, 1)) Then
    If StringRegExp($aNext[10], $sPattern) Then $sRet &= $aNext[10] & "|"
    EndIf
    Until 0

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

    _FTP_FindFileClose($hFFFF)

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

    If $sRet = "" Then
    Local $Ret[1] = [-1]
    Return SetError(2, @error, $Ret)
    EndIf

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

    Return StringSplit(StringTrimRight($sRet, 1), "|", $iSplitFlag)
    EndFunc ;==>_FTP_ListToArray2

    [/autoit]
  • Danke dir - dann gehts natürlich noch einfacher:

    Spoiler anzeigen
    [autoit]

    #include <ftpEx.au3>
    #include <array.au3>

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

    $server = 'ftp.csx.cam.ac.uk'
    $username = ''
    $pass = ''

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

    $hFTP = _FTP_Open('FTP_open')
    $hFTPCon = _FTP_Connect($hFTP, $server, $username, $pass)

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

    $aFileList = _FTP_ListToArray2($hFTPCon, "pub/information/courses/perl/", "*.zip", 1)
    _ArrayDisplay($aFileList)

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

    ; #FUNCTION# ======================================================================================
    ; Name ..........: _FTP_FileList()
    ; Description ...: Listet alle Dateien und Ordner in allen Ebenen eines FTP-Pfades
    ; Syntax ........: _FTP_FileList(Const $hConn[, $sPath = ""])
    ; Parameters ....: Const $hConn - Handle zu einer offenen FTP-Verbindung. (z.B. mit FTP_Open)
    ; $sPath - [optional] Ordnerpfad auf dem Server welcher durchsucht werden soll (default:"")
    ; $sPattern - Dateinamensfilterung anhand von WildCards (* und ?)
    ; Const $iFlag - 1=nur Dateien, 2=nur Ordner, 3=Dateien+Ordner
    ; $iSplitFlag - Siehe Parameter "flag" bei StringSplit()
    ; Return values .: Success: Array mit Datei/Ordnernamen
    ; Failure: Setzt @error = 1 und Array[0] = -1
    ; Author ........: AspirinJunkie
    ; Related .......: #include <ftpEx.au3>
    ; =================================================================================================
    Func _FTP_ListToArray2(Const $hConn, $sPath = "", $sPattern = "*", Const $iFlag = 3, Const $iSplitFlag = 0)
    Local $sRet = ""
    Local $hFFFF, $aNext, $i

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

    If StringRight($sPath, 1) = "/" Then $sPath = StringTrimRight($sPath, 1)

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

    $aNext = _FTP_FindFileFirst($hConn, $sPath & "/" & $sPattern, $hFFFF)
    If @error Then
    Local $Ret[1] = [-1]
    Return SetError(1, @error, $Ret)
    EndIf
    If (BitAND($aNext[1], 16) And BitAND($iFlag, 2)) Or ((Not BitAND($aNext[1], 16)) And BitAND($iFlag, 1)) Then $sRet &= $aNext[10] & "|"

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

    Do
    $aNext = _FTP_FindFileNext($hFFFF)
    If @error Then ExitLoop
    If (BitAND($aNext[1], 16) And BitAND($iFlag, 2)) Or ((Not BitAND($aNext[1], 16)) And BitAND($iFlag, 1)) Then $sRet &= $aNext[10] & "|"
    Until 0

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

    _FTP_FindFileClose($hFFFF)

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

    If $sRet = "" Then
    Local $Ret[1] = [-1]
    Return SetError(2, @error, $Ret)
    EndIf

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

    Return StringSplit(StringTrimRight($sRet, 1), "|", $iSplitFlag)
    EndFunc ;==>_FTP_ListToArray2

    [/autoit]