Newsgroup: it.comp.lang.visual-basic
Titolo: Conferma fine file

Attraverso la procedura sotto riportata, scarico un file exe da un web 
server.
Vorrei sapere se c'� un modo per capiere se il file � stato scaricato 
completamente, perch� se il server va in Down la variabile B() mi diventa 
incompleta e quindi crea un file non valido.
Avevo pensato alla verifica dell'ultimo carattere del file: ma non so' se 
sono tutti uguali i caratteri finali degli exe.
Grazie.
Dim B() As Byte
B() = Inet.OpenURL("
http://www.sito.com/programma.exe
")
Open C:\programma.exe For Binary Access Write As #1
Put #1, , B()
Close #1

 Close #1
Non mi risulta che ci sia un carattere di fine file se non in vecchi file 
sequenziali che credo nessuno usi piï¿½. (In compenso tutti gli exe hanno la 
stessa word iniziale.)
Non conosco bene questo controllo, ma:
(1) possibile che ti ritorni un buffer incompleto se l'operazione non va a 
buon fine? Sembra strano: se ï¿½ un'operazione sincrona, come pare, dovrebbe 
annullare il risultato in caso di incidente (ma forse gli autori non sono 
stati cosï¿½ accurati)
(2) hai due modi per verificare il risultato: (a) conoscere la lunghezza del 
file o (b) conoscere un checksum del file. Questo metodo non ti consente di 
avere la lunghezza del file (che con altri strumenti puoi ottenere) ma se il 
server ï¿½ sotto il tuo controllo potresti inserire una di queste informazioni 
altrove (un file/tabella). Se cosï¿½ non ï¿½ e davvero puoi ottenere risultatio 
incompleti, non vedo altra soluzione se non usare qualcos'altro.
(3) Non ï¿½ un argomento valido perchï¿½ giustamente bisogna prevedere 
l'imprevedibile, ma questo server perchï¿½ dovrebbe andar giï¿½ di continuo?
Il mio consiglio comunque ï¿½ di usare altri strumenti e/o protocolli. P.es., 
se il server supporta l'FTP puoi usare il metodo Execute di Inet1 per avere 
oltre al file anche alcune informazioni sulla cartella.
Stefano

Per ora non � successo che mi scaricasse un file parziale.
Avevo simulato io l'eventualit� di uno stacco dalla rete del PC mentre 
scaricava, ed il programma mi creava un file exe di lunghrzza zero.
Per impedire questo volevo inserire una verifica di esistenza reale del 
file, a questo punto credo che basti verificare che la variabile B() sia 
maggiore di zero.
Ma come si fa' a verificare che sia maggiore di zero ?
La butto li:
len(B)>0
oppure
len(B())>0
Grazie per la risposta.
L'utilizzo di FTP andrebbe bene se non fosse che si puo' accedere un solo 
utente per volta e nel mio caso non posso farlo.

 utente per volta e nel mio caso non posso farlo.
Determinare se un array ï¿½ vuoto ï¿½ sempre stato un problema in VB6. Di sicuro 
non puoi usare Len() perchï¿½ si usa con stringhe e strutture, non con array. 
D'altra parte funzioni con IsEmpty e IsNull mi pare non abbiano mai 
funzionato. Direi che puoi fare il test solo trappando l'errore:
   On Error Resume Next
   Err.Clear
   Dim i As Long
   i = UBound(b)
   If Err.Number <> 0 Then i = -1
   On Error GoTo <<PrecedenteGestore>>
   If i < 0 Then
      'l'array ï¿½ vuoto
   End If
Brutto ma funziona.
Tieni perï¿½ presente che questo ï¿½ un metodo che richiede il file ad un sito 
web via http: in caso di problemi - 
p.es
. se il file non esiste - ti viene 
ritornata la pagina predefinita di errore del browser (quindi un documento 
html) e non un array vuoto. Dovresti quindi riuscire a testare il contenuto. 
Se ti aspetti SEMPRE degli exe, puoi verificare se il primi due bytes sono i 
caratteri 'M' e 'Z' che sono presenti in ogni exe (non ï¿½ molto 
scientifico...)
Stefano