Newsgroup: it.comp.programmare.win32
Titolo: Dimensione reale di un file in download

Quando si trasferisce un file di grosse dimensioni utilizzando una rete, il
file "comincia" ad essere scritto nella folder di destinazione, ma
restituisce lunghezza 0 byte fino a quando non viene chiuso.
Ipotizzando di sospendere momentaneamente il trasferimento, e di chiudere
temporaneamente il file per riaprirlo poi quando si ricomincia a trasferire,
il file, fin quando e' chiuso mostrera' la reale dimensione trasferita fino
a quel momento, e poi, una volta riaperto per continuare il trasferimento,
mostrera' sempre la dimensione precedente, fino a quando non viene chiuso.
E' un po' quello che succede quando si fa il Download di un file con un
programma di FTP o con WinMX, per esempio.
Il problema e': come posso avere la vera dimensione del file trasferito fino
a quel momento? Attenzione, non chiedo di sapere come fare a contare i bytes
quando trasferisco i files con un programma mio, parlo di leggere la
dimensione del file che stanno trasferendo altri programmi, per esempio
WinMX.
Grazie.

 WinMX.
Se vuoi sapere la dimensione totale del file che stai trasferendo con WinMx,
se usi la versione 3.31 il file si chiama __INCOMPLETE__ nomedelfile
dimensione.estensione
Dove dimensione è una stringa in esadecimale e contiene la dimensione totale
del file che stai scaricando :)
Se usi la 2.6 invece il tutto è scritto nel file incomplete.txt (mi pare)
Con WinMx il "problema è risolto", con gli altri... eh... non saprei "cosa
inventare" (non li uso) qualcuno magari ne saprà di più :D
Ciauz! :)
--
Virtual

 dimensione.estensione
ti sono grato, anche se lo sapevo gia'.... in realta' quegli ultimi 8
caratteri prima dell'estensione e' il valore scritto in esadecimane della
dimensione totale che avra' il file quando sara' arrivato tutto. Invece a me
serve sapere quanto ne e' stato scaricato fino a quel momento.
E, come spiegato prima, fino a quando winmx non lo chiude (per esempio
quando vieni staccato e il download si stoppa) windows non aggiorna i dati
relativi alla dimensione reale, ma mantiene in memoria il numero
corrispondente ai byte di quando lo hai aperto per iniziare a scaricare:
quindi, se hai appena iniziato, trovi 0 byte, se era gia' stata scaricata
una parte trovi la lunghezza di quella parte.

 una parte trovi la lunghezza di quella parte.
Dipende da Windows... con Xp i dati sono aggiornati, mentre win98 rimaneva
fisso... però prova a copiare il file e vedi che il dato sarà giusto...
Poi magari se lo apri in sola lettura (facendo il programma apposito)
potresti ottenere la dimensione corretta del file attualmente scritto... ma
non ne sono sicuro... magari WinMx lo apre in scrittura e non lo chiude... e
quindi la dimensione "non si può sapere" :( (anche se - però - copiandolo
viene copiato correttamente...)
Ciauz! :)
--
Virtual

 Poi magari se lo apri in sola lettura (facendo il programma apposito)
hai perfettamente ragione!
se lo si apre in lettura e si legge la dimensione con le apposite funzioni,
la grandezza restituita e' esatta.
Solo l'elemento size del searchrecord della funzione FindNext (che immagino
usi anche windows per mostrare le proprieta' del file) non viene aggiornato
in tempo reale.
Grazie.

 ha scritto nel messaggio news:GbZha.153
senti, sei lo stesso "Virtual" che voleva scrivere un searcher per winmx
l'anno scorso?
===============
Cosa c'entra il messaggio personale ? Mbeh, se sei tu, hai avuto (e mi
auguro che tu abbia risolto) lo stesso problema che sto avendo io.
Veniamo al problema.
Sto cercando di leggere il contenuto della listview dove WinMX riporta i
files che sta scaricando.
Ho trovato un vecchio messaggio di "kiuhnm", scritto nel 2002, ecco il link:
http://groups.google.it/groups?hl=it&lr=&ie=UTF-8&selm=%256ah9.112680%24pX1
.
4031189%
40news2.tin.it
nel quale si suggerisce un metodo che legge il contenuto della listview di
ricerca di winmx.
Pero', quel codice funziona se e solo se la finestra del search di winmx e'
attiva e il perche' sara' chiaro fra poco.
Se io faccio partire  WINMX, lui si posiziona sulla finestra NETWORKS ed
effettua il collegamento.Poi rimane li' fermo.
Per poter leggere la listview contenuta nella finestra "TRANSFERS"
occorrerebbe l'handle a questa finestra.
Io non sono riuscito a trovarlo in nessun modo. Esso comincia ad apparire
nella lista degli handle delle childwindow della finestra di WINMX solo
quando viene premuto manualmente il relativo bottone "transfers". Ne
consegue che, per poter leggere il contenuto della listview sita in questa
finestra, io devo premere, manualmente o attraverso un messaggio alla
window, il tasto "transfers". Ebbene, non riesco a trovare il modo neanche
per fare questo. Ci sto impazzendo da una settimana, e vi assicuro, riesco
benissimo a generare il click dei bottoni di altri programmi, quindi non e'
un problema di codice.
Poi c'e' un'altro problema: come spiegato nel thread del messaggio citato
sopra, i testi degli Items della listview non sono contenuti nel campo
pszText, che potrebbe essere riempito da una ListView_GetItemText(). Essi
risiedono chissa' dove. Eppure c'e' qualcuno che ha trovato come fare.... se
analizzate il funzionamento di MXLinx, che potete scaricare qui:
http://www.fmtec.it/itahash/files/mxlinx-v0.43.exe
scoprirete che l'autore ha trovato eccome il modo di leggere e scrivere ed
interagire con winmx. Il programma, infatti, oltre ad eseguire il controllo
delle QUEUE in UPLOAD, cancellando utenti molesti o abilitando il transfer
per altri non appena si collegano, prende i codici HASH dei files da
scaricare e li cerca nel network, mettendoli automaticamente in upload
appena trovati....
Non voglio arrivare a fare tutto cio', mi basterebbe riuscire a leggere i
testi della listview di download.
Vi ringrazio per l'aiuto che mi darete.
Saluti a tutti.