Español
Foro

Hecho: Blockread / Umrechnung Dateigröße

 

DeHarrow
¡Hola a Alle!
Zu mi Problema: Posesiones diferente Archivos, el I, con Blockread/write kopieren möchte - doch no con: @BlockRead(Expediente$, Ber#, 0, FileSize(Expediente$)), pero meinetwegen con 1024 Byte(weise).

Sinn se ser: Posesiones una Progressbar, el el Status des Kopierens Mostrar se. Wäre blöd, si entonces Ruckzuck 100% adecuado voluntad anstatt meinetwegen 10%, 15% kopiert etc.

Wenn Yo el Filegröße por 1024 teile, entonces bekomme Yo Nachkommastellen, el no beachtet voluntad - el Expediente se unvollständig kopiert. Aufrunden en todo Zahl sin Kommastelle brachte auch nichts.

Weiß alguien Yo lo al besten anstellen/umrechnen podría. En pequeño Archivos klappt lo sí con el Valor 1024, pero en großen Archivos de MB eben no. Hoffe ihr wißt Yo mi.

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



Hai, primero podría BlockWrite así viele Byte escribir, como Función BlockRead como gelesene Bytes zurückliefert. El Puffergrösse hängt vom Zielmedium de de/en el el Expediente geladen/geschrieben se - 1024Byte erscheint me en normalen Festplatten y heutigen OSsses como deutlich a gering. Yo sería vlt. con uno Puffergrösse de 256KB herantesten - macht sí no Sinn el CPU mehr a quälen como notwendig porque Platte+Cache+OS el "eh" nochmals managen.
 
02.09.2009  
 




DeHarrow
¡Hola IF - Gracias primero para deine Antwort.
Das Problema: Yo muß una Valor sin Komma rausbekommen.

Posesiones z.B. una Expediente de 1079214 Bytes oder 1.02 MB. Wenn Yo esta Valor komplett en el Speicher lese y escribir, entonces el Fortschrittsbalken eben igual en 100%.
Ok Statusbalken adaptar wäre kein Thema más o menos...
...möchte sólo sólo kleinere Schritte en el Statusbalken Mostrar dejar (meinetwegen 10%, 20%, 30% kopiert etc.)
Dividiere Yo entonces por algo z.B. FileSize(Expediente$) / 1024 (oder eben größer) una otro Bytezahl a bekommen, entonces Yo Nachkommastellen y lo klappt entonces eben no con Blockwrite.

Yo müßte sozusagen para diferente Dateigrößen en Bytes, KB, MB etc. una verlässlichen Valor haben.

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




Nico
Madysa
Nehmen wir veces a, du habest una Expediente de 2049 Kilobytes, sólo como Ejemplo.
Usted könntest doch ganzzahlig por 1024 teilen y dies kopieren. El Prozentanzeige bekommst du entonces después de 100 * GeleseneBytes% / FileSize(datei$). Nach el Bucle, el el macht, ermittelst du con Modulo simplemente el verbleibenden Bytes y kopierst esta auch. El Prozente necesario danach no mehr ausgerechnet voluntad, lo ergeben se sí 100%.
KompilierenMarcaSeparación
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 él algo como: [...] 

(una vez más korrigiert)
KompilierenMarcaSeparación
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
(achtung code sólo hingeschmiert, necesariamente en fehler checken)
 
02.09.2009  
 




DeHarrow
¡Hola!

Gracias para el Respuesta!
Sieht en el ersten Blick spitze de - voluntad lo veces ausprobieren - besten Dank!

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



^ ^
 
02.09.2009  
 




Andreas
Miethe


Zu el Thema gehört tal vez auch el Sistema-Diálogo, el una Fortschritt beim Kopieren oder irgendwelchen Berechnungen anzeigt. Hierbei se una Fortschrittsbalken y una Restdauer( el Windwos automáticamente berechnet) adecuado.
KompilierenMarcaSeparación
 $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 Ejemplo!
 
05.09.2009  
 



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

4.295 Views

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

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie