Newsgroup: it.comp.lang.visual-basic
Titolo: ? Compare tra due files

Sto creando un programma che permette di sincronizzare i files tra HD e
CD-RW, ora purtroppo ho notato che la copia non è sempre perfetta, e mi
piacerebbe quindi implementare una funzione di verifica dei files dopo la
copia.
Esiste un API che permetta di confrontare due files, o devo per forza fare
tutto da codice (lento)?
Vorrei anche  evitare di usare i comandi esterni del Dos (vedi Shell)...


Non so sinceramente se esistono API....ma da codice è possibile eseguirlo
abbastanza velocemente....basta che tieni un buon buffer in RAM e leggi e
confronti molti byte alla volta.
Dovrebbe venire abbastanza veloce.
Ciao
Sandro

 Dovrebbe venire abbastanza veloce.
Beh, farò così allora!
Ciao
Dimio

 CD-RW, ora purtroppo ho notato che la copia non è sempre perfetta
scusa che significa che la copia non è perfetta?
ad es, se uno copia un EXE da HD a CD e la copia non è perfetta... che lo
copia a fare?
come si puo evitare?
ciao
MarioH

 come si puo evitare?
L'unico sistema che ho trovato è quello di comprimere i files in un unico
archivio, che poi copio sul CD-UDF.
A quel punto estraggo il CD (per azzerare la cache), lo reinserisco nel
lettore e poi lo controllo con FC /b.
Se è venuta male la copia ripeto la procedura, fino a che non viene bene.
Ovviamente il sistema non è utilizzabile qualora si vogliano aggiungere al
CD molti files con varie sottodirectory. Per questo ho pensato di scrivere
un programma apposito che faccia oltre alla sincronizzazione di due
directory anche il compare.
Ciao
Dimio


ho capito
grazie
MarioH

 forza fare tutto da codice (lento)?
Algoritmi MD5 e CRC32:
http://www.di-mgt.com.au/crypto.html
CRC32 considera il contenuto del file come un unico, enorme numero 
binario, lo divide (non con la divisione aritmetica, ma con 
un'operazione affine - "divisione polinomiale modulo 2" - senza alcuna 
utilità pratica ma che è più semplice da calcolare per i computer - per 
la cronaca, usa lo Xor al posto di sottrazione e addizione) per un 
particolare numero e restituisce il resto della divisione (un intero a 
32 bit, un Long praticamente). Molto difficilmente due file diversi 
restituiranno lo stesso identico resto
MD5 è un algoritmo complicatissimo, molto più accurato del CRC32, 
produce come risultato di convolute operazioni matematiche sui dati del 
file un set di 4 Long anzichè uno solo, ed è valido crittograficamente: 
dato un hash MD5 - ossia il set di 4 Long restituito dalla funzione - è 
praticamente impossibile risalire, intenzionalmente o per caso, ai dati 
originali. In pratica, due file non perfettamente identici non avranno 
MAI lo stesso hash

> Algoritmi MD5 e CRC32:
Beh, interessante... ma che vantaggio avrei rispetto a un confronto byte to
bye?

byte to bye?
che puoi salvare i checksum CRC o gli hash MD5 ottenuti in un file di 
testo, e ricontrollare quando ti pare anche in mancanza degli originali.  
Che, hai visto mai, ti servisse un programma per verificare se hai dei 
file identici su disco? Non guardarmi storto, si fa cosě...

 file identici su disco? Non guardarmi storto, si fa cosě...
Beh, in quel caso, giustamente, c'č il vantaggio di evitare la rilettura
multipla dello stesso file, ma nel mio caso č diverso. Io cerco solo di
implementare una funzione simile al FC /B o al vecchio COMP.EXE per
assicurarmi che la copia di un file sia venuta bene.
In questo caso ogni file viene scritto e riletto una sola volta quindi...