Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Errore di Accesso al File (Errore Runtime 70)
Forum - Visual Basic 6 - Errore di Accesso al File (Errore Runtime 70)

Avatar
00bullo00 (Normal User)
Newbie


Messaggi: 17
Iscritto: 19/09/2010

Segnala al moderatore
Postato alle 18:16
Venerdì, 25/02/2011
Ragazzi, vi propongo questo codice:

Codice sorgente - presumibilmente Delphi

  1. On Error GoTo Occupato1
  2. If Dir(App.Path & "/File Ricevuti/" & NomeFile + "." & EstensioneFile) = "" Then
  3.     F = FreeFile
  4.     Open App.Path & "/File Ricevuti/" & NomeFile + ".temp" For Binary Lock Write As #F
  5. Else
  6.     Do
  7. Occupato1:
  8.         i = i + 1
  9.         If Dir(App.Path & "/File Ricevuti/" & NomeFile & "(" & i & ")." & EstensioneFile) = "" Then
  10.              F = FreeFile
  11.              Open App.Path & "/File Ricevuti/" & NomeFile & "(" & i & ")" & ".temp" For Binary Lock Write As #F
  12.              NomeFile = NomeFile & "(" & i & ")"
  13.              Creato = True
  14.         End If
  15.     Loop Until (Creato = True)
  16. 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
PM
Avatar
jack92 (Member)
Pro


Messaggi: 100
Iscritto: 06/08/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 15:35
Sabato, 26/02/2011
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 ;)

Il fatto che il problema fosse della funzione Dir non ci avevo mai pensato...avevo sempre accusato il fatto che tutti e tre i processi accedessero con la medesima tempistica al file (quindi nel controllo si verificava come condizione l'inesistenza del file a tutti quanti), anche se mi sembrava decis - 00bullo00 - 27/02/11 14:50
Comunque ho provato ma purtroppo non va, il problema sembra essere il fatto che si disattivi l'OnError Goto dopo la prima volta che si attiva...non so come farlo evitare però... - 00bullo00 - 27/02/11 15:10
PM