00bullo00 (Normal User)
Newbie
Messaggi: 17
Iscritto: 19/09/2010
|
Ragazzi, vi propongo questo codice:
Codice sorgente - presumibilmente Delphi |
On Error GoTo Occupato1 If Dir(App.Path & "/File Ricevuti/" & NomeFile + "." & EstensioneFile) = "" Then F = FreeFile Open App.Path & "/File Ricevuti/" & NomeFile + ".temp" For Binary Lock Write As #F Else Do Occupato1: i = i + 1 If Dir(App.Path & "/File Ricevuti/" & NomeFile & "(" & i & ")." & EstensioneFile) = "" Then F = FreeFile Open App.Path & "/File Ricevuti/" & NomeFile & "(" & i & ")" & ".temp" For Binary Lock Write As #F NomeFile = NomeFile & "(" & i & ")" Creato = True End If Loop Until (Creato = True) End If
|
Allora praticamente il resto di un programma si occupa di ricevere un file dalla rete e salvarlo nella cartella File Ricevuti, che verrà creata come sottocartella dove il programma è stato lanciato. Lo scopo del codice è di verificare se il file da salvare ha un omonimo nella cartella File Ricevuti e, nel caso si verifichi questa condizione, aggiungere al nuovo file il valore di i tra parentesi. Il risultato è che, se ci sarà un file omonimo, quello nuovo avrà nel nome la dicitura "(1)".
Se esisterà anche un omonimo del Nomefile(1) verrà creato un NomeFile(2) ecc all'infinito.
Ebbene non è questo che non funziona. In pratica, se eseguo 4 volte lo stesso programma (so che non ha senso, ma mi è necessario per una dimostrazione che devo fare e non ho a disposizione vari pc), nonostante i controlli, tutti e 4 i processi accedono allo stesso file contemporaneamente. Essendo questi ultimi bloccati una volta aperti in teoria, grazie alla gestione errori, dovrebbe annullare l'apertura tornando al punto Occupato1, incrementare l'indice e quindi comportarsi come se si fosse trovato un omonimo...invece ciò avviene solo la prima volta quindi il primo processo accede al file, il secondo pure, il terzo e il quarto danno l'errore nel titolo.
Ho fatto svariate prove e sono sicuro che tutti tentato di accedere allo stesso file contemporaneamente e anche che l'errore sia sull'istruzione di apertura. Avete qualche idea?
Chiedo perdono per la complessità del problema ma le ho provate tutte...e non riesco a trovare una soluzione.
P.S: Dimenticavo che la gestione errori funziona...ma solo la prima volta, la seconda no...ho provato anche, dopo occupato1 e al secondo tentativo, di ripetere l'onerror goto ma non c'è niente da fare...non lo considera..
Grazie in anticipo.
Ultima modifica effettuata da 00bullo00 il 25/02/2011 alle 18:18 |