Newsgroup: it.comp.lang.visual-basic
Titolo: Verifica esistenza File

Ciao, volevo chiedervi quale tecnica usereste voi, oppure avete usato nel 
verificare la presenza di un file.
Devo generare dei file txt che verranno acquisiti da una procedura 
automatica, quindi io una volta costruito il file devo "aspettare" finchè 
non ci sia più.
adesso faccio così..
    Dim X As Integer
    X = 0
    While X = 0
        If EsisteFileTxt(OUT_ANAG) = False Then X = 1
        DoEvents
    Wend
Private Function EsisteFileTxt(FileImp As String) As Boolean
    Set fs = CreateObject("Scripting.FileSystemObject")
    EsisteFileTxt = fs.FileExists(FileImp)
End Function
Ma ci sono volte che il programma automatico non acquisisce nulla (per mille 
motivi) e il mio programmino va in loop!
Voi come fate?

San72 ci ha detto :

In linea di principio, non è che ci sia niente di diverso da un polling 
che testi l'esistenza del file.
Volendo però migliorare il tuo codice, direi di evitare il loop e di 
fare un test ogni tot secondi o millisecondi (dipende dai tempi che ti 
puoi permettere), sfruttando un timer.
Inoltre, il CreateObject è un'operazione particolarmente pesante, ti 
consiglio di eseguirlo una tantum e di passare byref alla funzione di 
test il riferimento all'oggetto fs.
Se il file è in un percorso di rete, qualora il pc che offre la 
condivisione sia fuori rete, ogni FileExists resta in freeze per il 
timeout della rete, ossia parecchi secondi, con CPU a 100. Se, ripeto, 
il file è in rete, ti consiglio di eseguire un ping (anche solo un 
singolo pacchetto è sufficiente) prima del fileexists.
Infine, ricorda che molti antivirus, come funzionalità di 
scriptblocking, inchiodano il FileSystemObject. Se riscontri problemi 
(che possono essere particolarmente subdoli se la tua procedura gira 
come servizio NT, quindi senza interattività a cui segnalare il 
messaggio di scriptblocking), prova a disattivare temporaneamente 
l'antivirus.
Ciao
Alberto
-- 
A questo punto hanno trovato un muro,
un muro duro, molto molto duro,
che siamo noi.


ha scritto:

Io uso GetFileAttributes per le proprietà dei file, non da errori di sistema e
restituisce solo un valore
Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA"
(ByVal lpFileName As String) As Long
 _______________________________
La funzione GetFileAttributes consente di conoscere il tipo di file o
di una directory, ovvero se trattasi di file nascosti, di sola
lettura, di systema, di archivio ecc.
In caso di errore, la funzione ritorna 0, se invece il file di cui si
vuol conoscere il tipo non viene trovato la funzione ritorna -1.
Altrimenti il valore ritornato, sarà uno o più di uno dei seguenti
flags.
FILE_ATTRIBUTE_ARCHIVE = &H20 Un file di archivio (la maggior parte
dei files).
FILE_ATTRIBUTE_COMPRESSED = &H800 Un file in un drive o in una
directori compressa.
FILE_ATTRIBUTE_DIRECTORY = &H10 Una directory invece di un file.
FILE_ATTRIBUTE_HIDDEN = &H2 File nascosto.
FILE_ATTRIBUTE_NORMAL = &H80 File senza attributi.
FILE_ATTRIBUTE_READONLY = &H1 File di sola lettura.
FILE_ATTRIBUTE_SYSTEM = &H4 File di sistema (lo usa solo il sistema
operativo)
Il parametro lpFileName contiene il path completo, ed il nome del file
di cui si vuol conoscere gli attributi.
_____________________________ 
--
ciao
  Stefano

Grazie, delle risposte.
Dunque il file è in rete, quindi ok per il ping. Ma esiste un esempio sul 
web?.. non l'ho mai usato.
L'uso del Timer, non riesco a vederlo applicato .. o  meglio
adesso il programma fa una serie di cose, Step1..2..3... al punto 4 crea il 
file...
il programma automatico dovrebbe acquisirlo ed io devo aspettare
....quindi non devo eseguire il punto 5 finche c'è il file.
Se uso un timer sarà slegato dal flusso... a meno che non lo attivo al punto 
3 e lo disattivo al punto 5
... ma in ogni caso il mio flusso si dovrebbe fermare....
non riesco a vederlo... forse ho bisogno di una speigazione in più.
Grazie, Ciao
