Oppure

Loading
11/06/08 15:08
feddur
Salve, scusate se ci sono altri topic sull'invio file, ma ho un problema diverso.
Vi posto il codice che mi da problemi.

 Open file For Binary Access Read As #1
 server.SendData "dimensione-" & LOF(1)
 Sleep (100)
 DoEvents
 chunk = 4000

  Do While Not EOF(1)
     datafile = Space$(chunk)
     Get 1, , datafile
     server.SendData datafile
     DoEvents
  Loop
    Close #1
    Sleep (2000)
    server.SendData "fine"


a quanto ho potuto capire non arriva l'EOF per interropere in ciclo, chiudere il file e indicare dall'altra parte che il trasferimento è finito e che bisogna chiudere il file.
infatti ho creato un pulsante che chiude il file e quando intuisco che il trasferimento è finito lo premo e il file è trasferito completamente.
chi mi sa aiutare?
grazie.
aaa
11/06/08 15:31
gantonio
Devi gestire la lunghezza del file.

Con la Lof hai trovato la lunghezza in byte ... la comunichi al server prima di tutto. Poi leggi tanti byte quanti indicati da questa lunghezza e li invii. Il server confrontera' il numero di byte ricevuti con il valore ricevuto all'inizio e chiudera' il file.
aaa
11/06/08 15:35
feddur
Postato originariamente da gantonio:

Devi gestire la lunghezza del file.

Con la Lof hai trovato la lunghezza in byte ... la comunichi al server prima di tutto. Poi leggi tanti byte quanti indicati da questa lunghezza e li invii. Il server confrontera' il numero di byte ricevuti con il valore ricevuto all'inizio e chiudera' il file.


pero' ho notato che i kb ricevuti (39 kb) sono diversi dai kb inviati (33.3kb).
aaa
11/06/08 15:38
gantonio
Scusa ... ma io ti ho detto di NON usare l'EOF ma la lunghezza del file ... tu hai corretto il codice?
aaa
11/06/08 15:40
feddur
Postato originariamente da gantonio:

Scusa ... ma io ti ho detto di NON usare l'EOF ma la lunghezza del file ... tu hai corretto il codice?


ah.. allora credo di non aver capito.. 8-|
aaa
11/06/08 15:47
gantonio
Il ciclo non lo devi fare con l'EOF (per un file binario non esiste l'EOF).

Devi ottenere la lunghezza in byte e fare un ciclo for in modo da leggere, a pezzi, il file fino alla lunghezza calcolata in precedenza.
aaa
11/06/08 15:57
feddur
Postato originariamente da gantonio:

Il ciclo non lo devi fare con l'EOF (per un file binario non esiste l'EOF).

Devi ottenere la lunghezza in byte e fare un ciclo for in modo da leggere, a pezzi, il file fino alla lunghezza calcolata in precedenza.


ah, bene.
non saprei come leggere la lunghezza dei byte ricevuti.
una volta che si eguagliano le due lunghezze poi posso chiudere il file?

edit:
capito, provo a modificare il codice.

edit:
ho problemi a trovare l'LOF(1) mentre il file è in trasferimento.

vorrei fare una cosa del genere:

while dimensionefile > EOF()
....
continua a scaricare
if dimensione = EOF()
chiudi file


come idea è giusta?
Ultima modifica effettuata da feddur 11/06/08 16:44
aaa
11/06/08 17:14
gantonio
Certe volte mi sembra di scrivere in arabo ...

Ti ho appena detto che EOF non va utilizzato e tu fai dei confronti con EOF?

Ti rispiego in modo piu' semplice

1) il client manda la lunghezza del file, ad esempio, 13403

2) il server conserva da qualche parte questo valore

3) il client manda un pezzo del file, ad esempio, 4000 byte

4) il server sa che ha ricevuto 4000 byte e che sono meno dei 13403 e attende il resto

5) il client manda il resto del file e lo chiude

6) il server sa che i byte ricevuti piu' quelli precedenti sono in totale 13403, ovvero quanti se ne aspettava e chiude il file

Okay?
aaa