View Full Version : [Visual Basic] Istruzione "Dir"
StefanoCsl
02-05-2007, 15:18
Ciao a tutti, sto facendo un programma che legga mediante l'istruzione "Dir" tutti files Excel in una cartella e per alcuni di essi faccia una copia di backup. A volte si riscontra l'errore 5 ("Chiamata di routine o argomento non valido"). Ancora non ne capisco il motivo, ma il problema è un altro. Infatti ho notato che questo errore non blocca l'elaborazione, quindi l'ho gestito facendo un "Resume Next" in caso si manifesti. La cosa strana è quella che accade dopo, infatti a volte continua leggendo sempre lo stesso file, causando così un loop infinito.
Qualcuno può aiutarmi?
Potrebbe aiutarmi anche capire con quale ordine i fogli sono letti (data, nome, dimensione, ecc)
Grazie
wingman87
02-05-2007, 16:05
Posta il codice che da problemi così gli diamo un'occhiata
StefanoCsl
02-05-2007, 21:44
Posta il codice che da problemi così gli diamo un'occhiata
Non mi rimane facile postare il codice perchè è formato da varie Function o Sub.
Ti riassumo le istruzioni quì sotto:
nomeFile = Dir("*.xls")
do while nomeFile <> ""
...
nomeFile = Dir()
loop
dopo una lunga serie di file in cui non ci sono problemi inizia a leggere sempre lo stesso. Da cosa può dipendere?
StefanoCsl
07-05-2007, 10:47
Sono riuscito ad isolare l'errore. L'istruzione che genera l'errore è la "Dir" all'interno del ciclo, l'errore generato è il 5 (Chiamata di routine o argomento non valido). Credo anche di aver capito perché quando succede il programma va in loop, infatti andando in errore entra nella routine di gestione degli errori dove, per esigenze di progetto, ho dovuto mettere un "resume next". Ovviamente l'applicazione esegue l'istruzione successiva tenendo in canna lo stesso nome file ed è per questo che inizia a leggere sempre lo stesso file.
Qualcuno di voi ha già avuto questo tipo di errore con l'istruzione "Dir"? Ho fatto anche una ricerca nella cartella ed il file c'è, quindi non è quello il problema, da cosa può dipendere?
Grazie a tutti
simoneart
07-05-2007, 10:59
hai provato a usare
io.Directory.GetFiles()
al posto di dir?
StefanoCsl
07-05-2007, 11:01
hai provato a usare
io.Directory.GetFiles()
al posto di dir?
E' un'istruzione di Visual Basic6?? :confused:
simoneart
07-05-2007, 11:21
scusami colpa mia :P
Come titolo avevo letto Visual Basic e per me è stato naturale pensare a .NET
StefanoCsl
07-05-2007, 11:25
scusami colpa mia :P
Come titolo avevo letto Visual Basic e per me è stato naturale pensare a .NET
Dal codice, immaginavo fosse .NET. In effetti anche io avrei dovuto specificare che si trattava di VB6.
Riguardo l'istruzione Dir sai dirmi qualcosa? Considera che l'applicazione gira dalle ore 19 e che in serata viene fatto un backup del contenuto dell'HD, io temo che ci possa essere un conflitto sui files, che ne pensi? Su MSDN, non ho trovato nulla dell'errore 5 che possa riguardare l'istruzione Dir.
simoneart
07-05-2007, 11:34
No, mi dispiace non saprei come aiutarti, probabilmente più che un problema di programmazione, potrebbe essere un problema di logica dell'applicazione.
Mi spiego meglio, magari è più semplice trovare una soluzione trovando una via alternativa per eseguire quel loop
StefanoCsl
07-05-2007, 11:38
No, mi dispiace non saprei come aiutarti, probabilmente più che un problema di programmazione, potrebbe essere un problema di logica dell'applicazione.
Mi spiego meglio, magari è più semplice trovare una soluzione trovando una via alternativa per eseguire quel loop
In VB6 l'unica istruzione che conosco per leggere i file di una cartella è "Dir". Avevo pensato di usare un "Resume" anziché un "Resume Next" per i primi 10 tentativi in modo di dargli la possibilità di leggere un file 10 volte nel caso non riuscisse a leggerlo. La cosa strana è che non va sempre in errore, ad esempio la passata sera è andato in errore solo una volta
wingman87
07-05-2007, 12:56
Il codice mi sembra giusto, mi sembra strano il comportamento che dici comunque se non si riesce a risolvere puoi sempre salvarti in una variabile il nome del file precedente e poi all'inizio del ciclo controlli se il file precedente è uguale a quello che stai leggendo e in tal caso esci dal do.
StefanoCsl
07-05-2007, 13:11
Il codice mi sembra giusto, mi sembra strano il comportamento che dici comunque se non si riesce a risolvere puoi sempre salvarti in una variabile il nome del file precedente e poi all'inizio del ciclo controlli se il file precedente è uguale a quello che stai leggendo e in tal caso esci dal do.
Siamo giunti alla stessa soluzione, ora ho adottato questo sistema, ma è solo una "toppa", infatti esce dal "do...while" e quindi non va in loop, ma neanche legge gli altri file. Per questo avevo pensato di fargli leggere lo stesso file per 10 volte prima di uscire dal loop, era un modo per avere 10 possibilità di lettura. Sono convinto che si tratti di un problema di conflitto nella cartella ma non capisco con cosa.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.