Newsgroup: it.comp.appl.access
Titolo: come definire se un file è presente prima di cancellarlo

Buongiorno a tutti,
tramite vba voglio cancellare un file in rete (perchè poi devo copiare nel medesimo posto una copia aggiornata), usando "kill" 
 
Kill "C:\Users\cdg001\a.txt"
 
Problema: se il file non è presente il comando dà errore. Come fare a verificare se il file è presente prima di (provare a) cancellarlo? C'è un sistema per farlo? Oppure ha più senso/è più semplice gestire l'errore?
Posso applicare la stessa cosa per il comando "copy"?
 
 
Grazie
 
Alessandro

Funzione Public da mettere in un Modulo STANDARD:
 
Public Function EsisteFile(ByVal str As String) As Boolean
    On Error Resume Next
    EsisteFile = (GetAttr(str) And vbDirectory) = 0
End Function
 
Es.:
 
Dim strFile As String
strFile="C:\Users\cdg001\a.txt" 
If EsisteFile(strFile) Then Kill strFile
 
Saluti
@Alex
 

Attenzione che se fosse aperto... avresti lo stesso problema...
 
La soluzione di Gestire l'ERRORE è sempre ottima.
 
@Alex

 
 
una cosa tipo Dir risente dello stesso problema?
 
qui sotto una routine che importa i file xlsx in corrispondenti tabelle di 
access; ovviamente gli si può dire di fare altro, p.e. Kill :)
 
 
    Dim MyName, TableName, MyDir As String
    MyDir = SourceFilePath
 
    MyName = Dir(MyDir + "*.xlsx")
    Do While MyName <> ""
        With ctl
            TableName = Left(MyName, Len(MyName) - 9)
                ' Manage some particular cases
                If TableName = "BUDGET" Then TableName = "BUDGET1"
                If TableName = "COMPANY" Then TableName = "COMPANY1"
                ' end of particular cases
            DoEvents
            SysCmd acSysCmdSetStatus, "Importing : " & TableName
            On Error Resume Next
            CurrentDb.TableDefs.Delete (TableName)
            DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, 
TableName, MyDir + MyName, True
        End With
        MyName = Dir
    Loop
 
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

Se devi ciclare dir va bene ed in quel caso non devi verificare se il file esiste perché sicuramente esiste dal momento che viene restituito dalla chiamata come indice sequenziale.
Se invece hai il nome del file da verificare puoi sempre usare Len(Dir(strFilename))>0 ma io preferisco sfruttare una funzione preposta a quello.
Per quanto concerne l'eventuale verifica di file in uso, un conto è leggerlo, servirebbe provare se la funzione TransfertSpreadsheet agisce o interagisce con l'eventuale bloccaggio, ma sicuramente la funzione Kill è affetta dal problema quindi se aperto non può cancellarlo.
Ci sono vari modi per prevenire il problema oppure si gestisce l'errore specifico.
 
@Alex

 oppure si gestisce l'errore specifico
 
"che è meglio" (cit.)


 puoi sempre usare Len(Dir(strFilename))>0 ma io preferisco sfruttare una funzione preposta a quello.
 
Per la mia esperienza, in locale ha sempre funzionato bene Dir, mentre in rete una volta ho avuto dei problemi, la 
funzione falliva, quindi ho dovuto passare a GetAttr.
 
Il file era presente ma len(dir(file) dava sempre zero. Su una sola macchina della rete, apparentemente identica alle 
altre
 
-- 
Greg