Oppure

Loading
25/02/11 17:16
00bullo00
Ragazzi, vi propongo questo codice:

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 25/02/11 17:18
aaa
26/02/11 14:35
jack92
Ciao :D
Non so se ho capito bene .... è come se l'applicazione non trovasse salvato il file nella cartella "File Ricevuti" .... prova a chiudere il file appena creato e poi riaprilo , così salvi il file e la funzione "Dir" vede il nome del file come già preso.
Spero di non aver detto stupidaggini :rotfl: :rotfl:

P.S. In bocca al lupo ;)
aaa