Français
Forum

Erledigt: Blockread / change Dateigröße

 

DeHarrow
allô à Alle!
trop meinem Problem: Habe différent Fichiers, qui je avec Blockread/write kopieren voudrais - doch pas avec: @BlockRead(Dossier$, Ber#, 0, FileSize(Dossier$)), mais meinetwegen avec 1024 Byte(weise).

Sinn soll son: Habe une Progressbar, qui den Status des Kopierens Montrer soll. Wäre blöd, si ensuite Ruckzuck 100% angezeigt volonté anstatt meinetwegen 10%, 15% kopiert etc.

si je qui Filegröße par 1024 teile, ensuite bekomme je Nachkommastellen, qui pas beachtet volonté - qui Dossier wird unvollständig kopiert. Aufrunden sur ganze numéro sans Kommastelle brachte aussi rien.

sais quelqu'un comment je es am besten anstellen/umrechnen pourrait. chez kleinen Fichiers klappt es oui avec dem Wert 1024, mais chez grand Fichiers ab MB plan pas. Hoffe vous savez quoi je mon.

Salut Jürgen
 
Angefangen hat alles mit Profan 5.0 ...noch auf Diskette
02.09.2009  
 



requin, zunächst pourrait BlockWrite so viele Byte écrivons, comment qui Funktion BlockRead comme gelesene Bytes zurückliefert. qui Puffergrösse hängt vom Zielmedium ab de/sur dem qui Dossier geladen/geschrieben wird - 1024Byte erscheint mir chez normalen Festplatten et heutigen OSsses comme deutlich trop gering. je serait vlt. avec einer Puffergrösse de 256KB herantesten - pouvoir oui keinen Sinn qui CPU plus trop tracasser comme notwendig weil Platte+Cache+OS cela "eh" nochmals managen.
 
02.09.2009  
 




DeHarrow
allô IF - merci erstmal pour deine Antwort.
cela Problem: je dois une Wert sans Komma rausbekommen.

Habe z.B. une Dossier de 1079214 Bytes ou bien 1.02 MB. si je cette Wert komplett dans den grenier lese et schreibe, ensuite ist qui Fortschrittsbalken plan juste chez 100%.
Ok Statusbalken anpassen wäre ne...aucune Thema ou bien so...
...voudrais arrêt seulement kleinere Schritte im Statusbalken Montrer laisser (meinetwegen 10%, 20%, 30% kopiert etc.)
Dividiere je ensuite par quelque chose z.B. FileSize(Dossier$) / 1024 (ou bien plan größer) um une autre Bytezahl trop bekommen, ensuite habe je Nachkommastellen et es klappt ensuite plan pas avec Blockwrite.

je devrait sozusagen pour différent Dateigrößen im Bereich Bytes, KB, MB etc. une verlässlichen Wert avons.

Salut Jürgen
 
Angefangen hat alles mit Profan 5.0 ...noch auf Diskette
02.09.2009  
 




Nico
Madysa
prenons la fois à, du habest une Dossier de 2049 Kilobytes, seulement comme Beispiel.
Du könntest doch ganzzahlig par 1024 partager et ca kopieren. qui Prozentanzeige bekommst du ensuite pour 100 * GeleseneBytes% / FileSize(fichier$). Pour qui Boucle, qui cela fait, ermittelst du avec Modulo simple qui verbleibenden Bytes et kopierst cet aussi. qui Prozente doit après pas plus ausgerechnet volonté, es ergeben sich oui 100%.
KompilierenMarqueSéparation
whileloop 0,dateigroesse%,1024*1024

    BlockRead(blubber)
    BlockWrite(blabber)
    prozent% = 100 * &loop / dateigroesse%

EndWhile

rest% = dateigroesse% mod (1024 * 1024)
BlockRead(datei$,bereich#,dateigroesse% - rest%,rest%)
BlockWrite(dito)
prozent% = /span>
 
Nico Madysa
02.09.2009  
 



Vlt. meint il quelque chose comme: [...] 

(encore la fois korrigiert)
KompilierenMarqueSéparation
CLS
MYFCOPY("csa.debug","map33.bmp")
WAITINPUT

proc MYFCOPY

    PARAMETERS _FROM$,_TO$

    IFNOT FILEEXISTS(_FROM$)

        RETURN 0

    ENDIF

    IF FILEEXISTS(_TO$)

        ERASE _TO$

        IF FILEEXISTS(_TO$)

            RETURN 0

        ENDIF

    ENDIF

    var SZ!=FILESIZE(_FROM$)

    IF SZ!<20

        COPY _FROM$,_TO$
        RETURN 1

    ENDIF

    var FHFROM%=ASSIGN(_FROM$)
    var FHTO%=ASSIGN(_TO$)

    IFNOT FHFROM% AND FHTO%

        case FHFROM% : ASSIGN FHFROM%,""
        case FHTO% : ASSIGN FHTO%,""
        RETURN 0

    ENDIF

    OPENRW FHFROM%
    OPENRW FHTO%
    var LSZ&=INT(RANGE(SZ!*0.05,20,2048))
    var RD&=0
    var ACC&=0
    DECLARE MYBUFF#
    DIM MYBUFF#,LSZ&

    WHILENOT EOF(FHFROM%)

        RD&=BLOCKREAD(FHFROM%,MYBUFF#,0,LSZ&)

        IFNOT RD&

            BREAK

        ENDIF

        INC ACC&,RD&
        BLOCKWRITE FHTO%,MYBUFF#,0,RD&
        RECTANGLE 0,0 - (ACC&/SZ!*100),10

    ENDWHILE

    DISPOSE MYBUFF#
    ASSIGN FHFROM%,""
    ASSIGN FHTO%,""
    RETURN FILEEXISTS(_TO$)

ss=s4 href='./../../funktionsreferenzen/XProfan/endproc/'>endproc
(attention code seulement hingeschmiert, absolument sur faute checken)
 
02.09.2009  
 




DeHarrow
allô!

merci pour qui répondre!
Sieht sur den ersten perspective spitze aus - werde es la fois ausprobieren - besten Dank!

Salut Jürgen
 
Angefangen hat alles mit Profan 5.0 ...noch auf Diskette
02.09.2009  
 



^ ^
 
02.09.2009  
 




Andreas
Miethe


trop dem Thema est peut-être aussi qui System-Dialog, qui une Fortschritt beim Kopieren ou bien irgendwelchen Berechnungen anzeigt. Hierbei wird un Fortschrittsbalken et une Restdauer( qui Windwos automatisch berechnet) angezeigt.
KompilierenMarqueSéparation
 $H Windows.ph
Var ole& = ImportDll("ole32.dll","")
Var oleaut& = ImportDll("oleaut32.dll","")
Declare bString1$

Proc Ansi2Uni

    Parameters s$
    Var Unicode$ = Space$((Len(S$)*2)+1)
    ~MultiByteToWideChar(0,0,Addr(S$),-1,Addr(Unicode$),Len(Unicode$))
    SysFreeString(bString1$)
    SysFreeString(bString1$)
    bString1$ = SysAllocString(addr(Unicode$))
    Return bString1$

EndProc

DEF &CLSCTX_INPROC_SERVER 1
DEF &PROGDLG_NORMAL 0
DEF &PROGDLG_AUTOTIME 2
DEF &PROGDLG_MODAL 1
DEF &PDTIMER_RESET 1
DEF &IDA_COPY_ANIMATION  160
Interface IProgressDialog
DEF &QueryInterface 0
DEF &AddRef 4
DEF &Release 8
DEF &StartProgressDialog 12
DEF &StopProgressDialog 16
DEF &SetTitle 20
DEF &SetAnimation 24
DEF &HasUserCancelled 28
DEF &SetProgress 32
DEF &SetProgress64 36
DEF &SetLine 40
DEF &SetCancelMsg 44
DEF &Timer 48
Var ProgressLimit& = 5000
Declare CLSID_ProgressDialog#,IID_IProgressDialog#
Dim CLSID_ProgressDialog#,16
Dim IID_IProgressDialog#,16
LONG CLSID_ProgressDialog#,0 = $f8383852
WORD CLSID_ProgressDialog#,4 = $fcd3, $11d1
BYTE CLSID_ProgressDialog#,8 = $a6, $b9, 0, $60, $97, $df, $5b, $d4
LONG IID_IProgressDialog#,0 = $ebbc7c04
WORD IID_IProgressDialog#,4 = $315e, $11d2
BYTE IID_IProgressDialog#,8 = $b6, $2f, 0, $60, $97, $df, $5b, $d4
Var X& = 0
Var dwCompleted& = 0
Var ppv& = 0
cls
CoInitialize(0)
Var hr& = CoCreateInstance(CLSID_ProgressDialog#, 0, &CLSCTX_INPROC_SERVER, IID_IProgressDialog#,Addr(ppv&))

If hr& = ~S_OK

    Var Command& = LONG(ppv&,0)
    Call(Long(Command&,&SetTitle),ppv&,Ansi2Uni("System Fotschritt-Dialogbox"))
    Var hShell& = UseDll("shell32.dll")

    If hShell&

        Call(Long(Command&,&SetAnimation),ppv&,hShell&,&IDA_COPY_ANIMATION)

    EndIf

    Call(Long(Command&,&Timer),ppv&,&PDTIMER_RESET,0)
    Call(Long(Command&,&SetCancelMsg),ppv&,Ansi2Uni("Cancel"), 0)
    Call(Long(Command&,&SetLine),ppv&,1, Ansi2Uni("System Fortschritt-Dialog Test mit XProfan"), 1,0)
    Call(Long(Command&,&StartProgressDialog),ppv&,%hwnd, 0, &PROGDLG_NORMAL | &PROGDLG_AUTOTIME | &PROGDLG_MODAL, 0)

    Repeat

        If Call(Long(Command&,&HasUserCancelled),ppv&)

            Call(Long(Command&,&StopProgressDialog),ppv&)
            MessageBox("Fortschritt abgebrochen","Meldung",0)
            Break

        Else

            Call(Long(Command&,&SetProgress),ppv&, dwCompleted&, ProgressLimit&)

            If dwCompleted& >= ProgressLimit&

                Call(Long(Command&,&StopProgressDialog),ppv&)
                MessageBox("Fortschritt komplett","Meldung",0)
                Break

            Else

                Call(Long(Command&,&SetLine),ppv&,2, Ansi2Uni("Wir sind jetzt hier : "+Str$(dwCompleted&)+" von "+str$(ProgressLimit&)), 1, 0)
                an dieser Stelle könnte man eine Kopierfunktion
                oder irgenwelche Berechnungen einbauen, statt nur einen Zähler laufen zu lassen.
                Inc dwCompleted&

            EndIf

        EndIf

        Sleep 10  je kleiner die Pause, umso schneller der Fortschritt

    Until X& =1

    Call(Long(Command&,&Release),ppv&)
    Dispose CLSID_ProgressDialog#,IID_IProgressDialog#
    SysFreeString(bString1$)

EndIf

CoUninitialize()
FreeDll Ole&
Freedll oleaut&
waitinput
end
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
05.09.2009  
 



Hehe tolles Beispiel!
 
05.09.2009  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

4.292 Views

Untitledvor 0 min.
H.Brill19.11.2023
RudiB.07.10.2022
Julian Schmidt05.08.2013
RICOSCH08.01.2013

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie