Newsgroup: it.comp.lang.visual-basic
Titolo: Integrità file

Su Google ho trovato qualcosa ,ma è tutto riferito ad integrità di dati...
che poi, sono d'accordo,  determineranno anche l'integrità del file... ma la
domanda è un'altra:
Se devo copiare un file da una dir ad un'altra e ne voglio verificare,
diciano cosi' , la "copiabilità" riferita all' integrità del file, come
posso verificarla ?
Pongo la domanda perchè in un Sub di copia file, mi è successo che un file
*.mdb "vuoto", senza record, non venisse preso in considerazione o comunque
arrestasse la copia senza segnalarmi alcun errore.
Mi sono allora posto il problema in modo più ampio, al di la del tipo di
file, grafico, sonoro, di database o di testo, come è possibile controllare
che questo sia "copiabile " ?
Grazie
--
Gulp  -  Forse mi sono perso qualcosa !

 controllare che questo sia "copiabile " ?
Ogni file è copiabile (la FileCopy ha l'unica limitazione che il file non
sia in uso), ma ho la sensazione che tu abbia usato istruzioni non
adeguate...
Le stesse infatti dovrebbero essere sganciate dalla tipologia del file, ma
copiare paro-paro tutto il contenuto (in fondo non sono altro che bytes...).
Io uso la Open ... For Binary e vado di blocchi con Get e Put. Copio
qualsiasi cosa, anche se in uso.

 altro che bytes...).
Allora converrai che di strano in questo codice non c'è niente:
For i = 1 To 7
'copia dei files da C:\ verso Unità A
    lblnotice.Caption = "Copia in corso di" & vbNewLine & NomeFile(i)
    lblnotice.Refresh
    FileCopy App.Path & "\" & NomeFile(i), "a:\" & NomeFile(i)
    PBar1.Value = PBar1.Value + fd(i)        'fd viene generato da una sub
che legge le dimensioni dei file da copiare
    PBar1.Refresh
Next i
Hai un'idea come mai allora non considerava neanche "esistente" (ma non dava
alcun segnale, nemmeno errore)
l'ultimo file dell'array Nomefile(7). E' l'unico file della serie che non
conteneva records....ma mi sembra di capire da quanto hai scritto che non
dovrebbe, anzi non deve essere importante...nulla dovrebbe impedire a
Filecopy di copiare qualsiasi file, quindi anche un file infestato da
errori, inaccessibile ecc.


 altro che bytes...).
 Dimenticavo di aggiungerti...e non mi sembra proprio un dettaglio da poco
che una volta scritto un record sul file suddetto, questo č statom
regolarmente copiato !!!
Bah !


 infestato da errori, inaccessibile ecc.
Esatto, salvo che il file non sia in uso e che, ovviamente, trovi spazio sul
supporto di destinazione

 statom regolarmente copiato !!!
Allora ti deve venire un dubbio: Chi compone il vettore dei file da copiare,
fa per caso delle verifiche?
Insomma, prova a metterti nelle condizioni "strane" che descrivi (un
database senza record) e fai un FileCopy diretto di quel file, senza test di
sorta, con un progetto apposito di un'istruzione. Lo copia? Se sì (e sì
dev'essere!) allora...

 Chissà se il file è in uso .......
Acci_DENTI ! Te ghe rason ! Hai ragione ! ....più che mettermi la pulce
nell' orecchio alle volte sarebbe meglio che ci mettessi un calabrone !
Proprio il file scadenze.mdb !!!! Il nome mi doveva pur ricordare qualcosa !
Viene consultato all'apertura dell' applicazione mediante una Public
presente nella form Scadenze che verifica date nel database.... e siccome
non viene aperto il form relativo, chi mai chiude più il database?
Ho provveduto.
Ti ringrazio


 Se sě (e sě dev'essere!) allora...
Allora (vedi piů su) aggiungendo il record suddetto devo aprire il form
Scadenze al Terminate del quale c'č il Database.close ed ecco che se senza
uscire dall' applicazione, provo a salvare i file con FileCopy... tutto va
OK !!! Ma che strano dicevo ... e invece no ! Semplice semplice: Leggi Lupo
e... ri-leggi Lupo !
Grazie ancora


 FileCopy... tutto va OK !!!
Bene per aver risolto, ma ... non mi piace lo stesso, oppure la guida di
FileCopy è sbagliata. Infatti in coda dice:
"Se si cerca di utilizzare l'istruzione FileCopy per un file aperto, verrà
generato un errore."
E' pur vero che un database aperto, ovvero disponibile per l'accesso e la
gestione, non è un file aperto con una esplicita Open su un canale, ma ...
sicuro di non avere qualche On Error Resume Next che impedisce la
comunicazione dell'errore?
E' strano che il file non venga copiato e non ti venga segnalato alcun
errore...
Per provare, rimettiti (provvisoriamente) nelle condizioni di prima
(immagino avrai inserito un db.Close prima di avviare la routine di copia)
e, immediatamente prima del FileCopy (proprio l'istruzione), metti un
provvisorio On Error GoTo pippo e, nella stessa Sub, metti una label pippo:
con Debug.Print Err e Stop
Giusto e solo per capire. Inoltre, è mille volte meglio un errore che un
programma che è solo apparentemente funzionante (proprio e solo perchè non
comunica errori), ma che non fa quel che deve.

 perchč non comunica errori), ma che non fa quel che deve.
Giusto ! Un programma che non comunica errori, mi ricorda una donna
silenziosa...
pericolosissima !  :-)
Hai ragione anche su On Error: su cui avevo piazzato un  GoTo CheckError nel
quale non era compreso codice per gestire quel tipo di errore e al tutto
seguiva un Else Exit Sub .
A dimostrazione che per proteggersi occorre farlo bene ! Altrimenti č piů il
danno.
Ciao
Grazie


 più il danno.
Appunto ;-)

 pericolosissima !  :-)
...ma inesistente (a meno che non sia muta). ;-)
Bye, G.