feddur (Normal User)
Pro
Messaggi: 200
Iscritto: 06/03/2008
|
Salve, scusate se ci sono altri topic sull'invio file, ma ho un problema diverso.
Vi posto il codice che mi da problemi.
Codice sorgente - presumibilmente Delphi |
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.
|
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
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.
|
|
feddur (Normal User)
Pro
Messaggi: 200
Iscritto: 06/03/2008
|
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). |
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Scusa ... ma io ti ho detto di NON usare l'EOF ma la lunghezza del file ... tu hai corretto il codice?
|
|
feddur (Normal User)
Pro
Messaggi: 200
Iscritto: 06/03/2008
|
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.. |
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
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.
|
|
feddur (Normal User)
Pro
Messaggi: 200
Iscritto: 06/03/2008
|
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 il 11/06/2008 alle 18:44 |
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
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?
|
|
feddur (Normal User)
Pro
Messaggi: 200
Iscritto: 06/03/2008
|
Postato originariamente da 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? |
si scusami, ho confuso mentre scivevo eof con lof |
|