Newsgroup: it.comp.lang.visual-basic
Titolo: 2 quesiti sui files BINARI

Ho due quesiti sui files BINARI:
1)    Come posso confrontare se due file BINARI sono uguali o meno ?
2)    Come faccio a leggere dati dai files BINARI (quali istruzioni) ?
Nel quesito 2) ho già provato con la banale INPUT #1 ma non riesco a
scorrere il file (aperto con OPEN "nome" FOR BINARY AS #1)
Grazie mille per l'aiuto.
    Massimo

Per il confronto non so che dirti, aspettiamo qualche altro msg.
Per quanto riguarda la lettura devi usare l'istruzione GET.
Ciao
Luca

scorrere il file (aperto con OPEN "nome" FOR BINARY AS #1)
per i file binari devi utilizzare le istruzioni Get per leggere e Put per
scrivere
per confrontare due file devi legge un byte alla volta da entrambi i file ed
effettuare il confronto
Ciao Bruno

Beh.. puo' anche caricare un gruppo di byte alla volta in modo da
velocizzare le operazioni.
Potrebbe caricare i dati un due variabili stringa e poi confrontarle "secco"
(es. if str1 <> str2 then msgbox "Diverse!")
Ciao!
Ah... dimenticavo!
Vi segnalo questo sito
http://www.ilsole24ore.it/premiowww/
presso il quale DOVETE votare il sito di MioMao :-)))
..'azzie!
-----------------------------------------
Andrea Varisco as MioMao
Paderno Dugnano  - Italy
Email: 
mio...@digibank.it
MioMaoCasaPagina: 
http://www.digibank.it/miomao
-----------------------------------------
TimeHomePage 
http://www.digibank.it/time

Ciao!
Sbagliato!
Soprattutto se lavori con file binari non devi mai leggerli come stringhe,
altrimenti VB effettua la conversione automatica inficiando il confronto.
Ciao Bruno

No No.... 'Sbagliato tu! :-)))
Scusa.. cioe'... quello che dici e' vero ma... cosa importa se VB effettua
la conversione?
Segui questo principio: se i byte dei due file sono identici, anche la
conversione sarà identica, no?!?
Oppure pensi che VB farà una conversione.... random?? :-)
Prova... vedrai che, dal punto di vista del confronto, funziona benissimo.
Inoltre, con questo sistema, puoi calcolarti i byte letti ed individuare
rapidamente la loro singola posizione, in modo di spostare a colpo sicuro il
puntatore al file (con Seek) e prelevare correttamente (quindi non come
stringa) il (o i) byte incriminato.
E' chiaro che se i file da confrontare sono composti di pochi byte... e'
preferibile utilizzare il sistema di caricamento unitario. Ma se le
dimensione dei file sono ragguardevoli.. non dimentichiamo che il VB non è
di certo una "lippa" in lettura/scrittura su HD :-)
Ciao, ci leggiamo :-)
MioMao

Prova... vedrai che, dal punto di vista del confronto, funziona benissimo.
Alt. ricapitoliamo il tutto.
.Il problema è quello di fare un confronto tra due file per stabilire se
sono o meno uguali.
Secondo me la procedura esatta è quella di aprire il file in modalità
binaria, leggere un byte alla volta ed effettuare il confronto.
Secondo te (se non mi ricordo male) è quello di leggere una stringa alla
volta ed effettuare il confronto (il vantaggio sarebbe quello di leggere un
maggior numero di caratteri, immagino utilizzando delle stringhe di
lunghezza fissa es. Stringa*10)
Non mi ricordo esattamente la spiegazione (appena ritrovo l'articolo
prometto di essere più preciso), ma era legata alle
impostazioni internazionali, all'uso del caratteri ANSI, BDCS e Unicode, per
cui si poteva avere due file diversi che risultavano uguali ad un confronto
di tipo testuale.
Per velocizzare la lettura nulla ti vieta di utilizzare una matrice di byte
Ciao Bruno

Va bene.... ciao :-)
MioMao

di tipo testuale.
Sembra che abbia detto una grossa cazz*^*.
Il problema della conversione avviene se apro il file in modalità testo,
mentre in modalità binaria non avviene nessuna conversione. D'altra parte,
mi è stato fatto notare, la stringa può anche essere vista come un array di
byte. Per completezza si può aggiungere che:
- nel caso di un confronto testuale bisogna specificare che il confronto è
binario (anche se è il tipo di default)
- la dimensione della stringa (array) deve essere pari alla dimensione del
cluster (più efficiente)
- ho perso una pizza! :-(
Ciao Bruno

lunghezza fissa es. Stringa*10)
Credo che il sistema piu' pulito ed efficiente sia quello di usare un
vettore di byte (anche se fosse uguale alle stringhe, e' sempre meglio
usare il tipo corretto, indipendentemente dalla conoscenza
dell'implementazione di un tipo affine: le implementazioni cambiano,
il buon codice resta...) e leggere blocchi di dimensioni 32KB o 64KB
(la seconda non so se funzioni, VB fa casino intorno ai 64KB, se non
erro).
Paolo

- ho perso una pizza! :-(
Avvertivo, giust'appunto, un languorino.... :-)))
Ciao
