File read im binär modus

  • Moin ich hab ja mal im forum angedeutet das ich ein programm schreiben will das in der lage ist dateien zu übertragen....
    jetz habe ich folgendes problem.

    ich wollte jetz rausfindn was die letzte zeile einer datei ist und welche zeile das ist.....

    hier ein testprogramm

    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------
    Global $Hour, $Mins, $Secs, $Days
    Opt("TrayIconDebug",1)

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

    $File = FileOpen ( "autoit-v3-setup.exe", 16 )
    $line = 1
    Global $timer = TimerInit()
    While 1
    $Gelesene_Zeile = FileReadLine ( $File,$line )
    If @error = -1 then ExitLoop
    $line = $line + 1
    Sleep(50)
    WEnd
    $line = $line - 1
    _TicksToTime_MOD(Int(TimerDiff($timer)), $Hour, $Mins, $Secs, $Days )
    MsgBox(0,"",$Mins&":"&$Secs)
    MsgBox(0,"",""&$line)
    $letzte_Zeile = FileReadLine ( $File,$line )
    MsgBox(0,"",""&$letzte_Zeile)

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

    Func _TicksToTime_MOD($iTicks, ByRef $iHours, ByRef $iMins, ByRef $iSecs , ByRef $iDays)
    If Number($iTicks) > 0 Then
    $iTicks = Round($iTicks / 1000)
    $iDays = Int($iTicks / 86400)
    $iTicks = Mod($iTicks, 86400)
    $iHours = Int($iTicks / 3600)
    $iTicks = Mod($iTicks, 3600)
    $iMins = Int($iTicks / 60)
    $iSecs = Round(Mod($iTicks, 60))
    ; If $iHours = 0 then $iHours = 24
    Return 1
    ElseIf Number($iTicks) = 0 Then
    $iDays = 0
    $iHours = 0
    $iTicks = 0
    $iMins = 0
    $iSecs = 0
    Return 1
    Else
    SetError(1)
    Return 0
    EndIf
    EndFunc

    [/autoit]

    für die autoit setup exe benötigt mein programm rund 7 minuten das ist aber zuviel und ich vermute mit fileread wird das kaum schneller gehen

  • ibt es da keine andere möglichkeit ich meine ich kann nicht 7 min warten bis ich 1 MB versende

    und was heißst versende bis er das zum versenden vorbereitet hat

  • Binäre Dateien haben keine Zeilen ...
    und wofür brauchst du die letzte Zeile überhaupt?

  • die letzte zeile war jetz nur so als test

    wie die haben keine zeilen sonst wüde das script nicht laufen

    und wie soll ich den sonst die daten gescheit auslesen???

    EDIT: ja wie liest man dan die binärcodes richtig aus weil bis jetz schlägt alles fehl

    2 Mal editiert, zuletzt von Matthias_199 (3. Mai 2009 um 21:41)

  • Hab dirs ja jetzt per PN geschickt ;)
    (FileRead mit Angabe der zu lesenden Anzahl von Bytes.)

    Und die haben keine Zeilen. AutoIt sucht nach den Bytes 13 (@CR) bzw. 10 (@LF) und ließt die Datei bis dahin aus. In binären Dateien haben diese bytes aber eine andere Bedeutung und daher kann es sein, dass "Zeilen" erkannt werden. Das sind aber keine echten Zeilen! Und die Suche nach diesen Zeichen kann sehr lange dauern ;)