Seite 2 von 2

Verfasst: 13.11.2006 22:57
von Hellhound66
Mit gebufferten Files einen Speedtest zu machen ist eher ungeschickt.

FileBuffersSize(#Datei, 0) solltest du schon machen.

Verfasst: 13.11.2006 23:15
von ts-soft
Die aktuelle Übertragungsrate mit nem Buffer von 0 anzeigen ist viel ungeschickter.
Wenns um die Messung der Geschwindigkeit versch. Vorgehensweisen geht,
ist es Okay, aber für die Anzeige der momentanen Übertragungszeit, wie es
viele Dateimanager machen, macht ein Buffer von 0 den Dateimanager eher
nutzlos. :mrgreen:

Verfasst: 13.11.2006 23:18
von Hellhound66
Is logisch. Weiss auch nicht, wie ich auf Speedtest kam.. :freak:

Verfasst: 13.11.2006 23:33
von ts-soft
In diesem Code: http://www.purebasic.fr/german/viewtopi ... 1&start=20
könnte man mit ElapsedMilliseconds() in der For-Next schleife so eine
Schätzung berechnen. Anstatt Progressebar zu setzen dann vielleicht mit
CallFunctionFast eine Callback-Procedure aktualisieren.

Verfasst: 14.11.2006 16:04
von mknjc
So ich hab das beispiel ein wenig verändert.

Ganz so klasse ist es noch nich vieleicht findet jemand was besseres.

Code: Alles auswählen

Procedure CopyFileEx(Source.s, Dest.s, Progressbar.l = #PB_Any, Datenr.l = #PB_Any, BlockSize.l = 4096) 
    Protected FileSource.l, FileDest.l, Mem.l, Size.q, Bloecke.q, Rest.q, i.l, Prozent.f, Zeit.l, Datenrate.l
    
    If BlockSize <= 0 : BlockSize = 1 : EndIf 
    
    FileSource = ReadFile(#PB_Any, Source) 
    FileDest = CreateFile(#PB_Any, Dest) 
        
    Mem = AllocateMemory(BlockSize) 
    
    If FileSource And FileDest And Mem 
        FileBuffersSize(FileSource, BlockSize) 
        FileBuffersSize(FileDest, BlockSize) 
        
        Size = Lof(FileSource) 
        Bloecke = Size / BlockSize 
        Rest = Size % BlockSize 
        
        Zeit = ElapsedMilliseconds()
        
        For i = 1 To Bloecke 
            ReadData(FileSource, Mem, BlockSize) 
            WriteData(FileDest, Mem, BlockSize) 
            
             Prozent = ((BlockSize * i) / Size) * 100 
            If Progressbar > #PB_Any And IsGadget(Progressbar) 
                SetGadgetState(Progressbar, Prozent) 
            EndIf 
             
            If (timeGetTime_() - Zeit) / 1000
                Datenrate = ((i * BlockSize) / ((ElapsedMilliseconds() - Zeit) / 1000)) / 1048576
                If Datenr > #PB_Any And IsGadget(Datenr) 
                    SetGadgetText(Datenr, Str(Datenrate)) 
                EndIf
            EndIf
        Next 
        
        ReadData(FileSource, Mem, Rest) 
        WriteData(FileDest, Mem, Rest) 
        If Progressbar > #PB_Any And IsGadget(Progressbar) 
            SetGadgetState(Progressbar, 100) 
        EndIf 
        
        FreeMemory(Mem) 
        CloseFile(FileSource) 
        CloseFile(FileDest) 
        
        If FileSize(Dest) > 0 
            ProcedureReturn #True 
        EndIf 
    EndIf 
    
    ProcedureReturn #False 
EndProcedure 

If Not OpenWindow(0, #PB_Ignore, 0, 300, 135, "CopyFileEx") : End : EndIf 
If Not CreateGadgetList(WindowID(0)) : End : EndIf 

ProgressBarGadget(0, 10, 10, 280, 40, 0, 100, #PB_ProgressBar_Smooth)
TextGadget(1, 10, 60, 280, 20, "", #PB_Text_Center)
ButtonGadget(2, 120, 90, 60, 25, "Start") 
Repeat 
    Select WaitWindowEvent() 
        Case #PB_Event_CloseWindow : Break 
        Case #PB_Event_Gadget 
            If EventGadget() = 2 
                DisableGadget(1, #True) 
                CopyFileEx("/home/mknjc/Progen/Bastelspass/Riesendatei", GetTemporaryDirectory() + "Testdata", 0, 1, 102400) 
                DisableGadget(1, #False) 
            EndIf 
    EndSelect 
ForEver
Mfg mknjc

Verfasst: 14.11.2006 16:05
von mknjc
[Gelöscht]

Verfasst: 15.11.2006 10:14
von HeX0R
Bin ja mal gespannt wie lange es dauern wird, bis auch in die letzte Ecke der User durchgedrungen ist, dass man eigene Beiträge auch löschen kann.
Sehr sinnvoll bei Doppelpostings wie hier.

Allerdings geht das auch nur solange kein anderer Depp (also in diesem Fall ich) darauf antwortet.

Ein sehr sinnvolles aber leider ungenutztes Feature dieses Boards.

Oder war es nur eine (ebenso typische) "Absenden-Klicken-und-Browser-Schliessen"-Tat ?

Verfasst: 16.11.2006 16:38
von mknjc
Ich hasse Wlan :cry:

Das kommt davon wen man schreibt und dann abhaut und nich guckt was man vorn mist verzapft hat.

Schullilung :oops:


Mfg mknjc