Utilizzando VBA, come posso:
1.) Seleziona qui . Fondamentalmente fai questo:
Function FileExists(ByVal FileToTest As String) As Boolean
FileExists = (Dir(FileToTest) <> "")
End Function
Lascio a te capire i vari errori di gestione necessari ma questi sono tra gli aspetti di gestione degli errori che prenderei in considerazione:
2.) Come eliminare un file. Guarda questo. Fondamentalmente usa il comando Kill ma devi consentire la possibilità che un file sia di sola lettura. Ecco una funzione per te:
Sub DeleteFile(ByVal FileToDelete As String)
If FileExists(FileToDelete) Then 'See above
' First remove readonly attribute, if set
SetAttr FileToDelete, vbNormal
' Then delete the file
Kill FileToDelete
End If
End Sub
Ancora una volta, lascerò a te l'errore di gestione e di nuovo queste sono le cose che prenderei in considerazione:
Questo dovrebbe comportarsi diversamente per una directory rispetto a un file? Un utente dovrebbe indicare esplicitamente di voler eliminare una directory?
Vuoi che il codice ripristini automaticamente l'attributo di sola lettura o all'utente dovrebbe essere fornita una sorta di indicazione che l'attributo di sola lettura è impostato?
EDIT: Contrassegnare questa risposta come wiki della comunità in modo che chiunque possa modificarla se necessario.
Potrebbe essere un modo alternativo per codificare la risposta di Brettski, con la quale altrimenti sono completamente d'accordo
With New FileSystemObject
If .FileExists(yourFilePath) Then
.DeleteFile yourFilepath
End If
End With
Stesso effetto ma meno (bene, nessuna) dichiarazioni di variabili.
FileSystemObject è uno strumento davvero utile e con cui vale la pena familiarizzare. A parte qualsiasi altra cosa, per la scrittura di file di testo a volte può effettivamente essere più veloce dell'alternativa legacy, che può sorprendere alcune persone. (Almeno nella mia esperienza, YMMV).
Probabilmente mi fotterò per questo, ma che senso ha testare l'esistenza se hai intenzione di eliminarlo? Uno dei miei principali animali domestici è un'app che lancia una finestra di dialogo di errore con qualcosa del tipo "Impossibile eliminare il file, non esiste!"
On Error Resume Next
aFile = "c:\file_to_delete.txt"
Kill aFile
On Error Goto 0
return Len(Dir$(aFile)) > 0 ' Make sure it actually got deleted.
Se il file non esiste in primo luogo, missione compiuta!
Di seguito è possibile utilizzare per verificare l'esistenza di un file e quindi per eliminarlo.
Dim aFile As String
aFile = "c:\file_to_delete.txt"
If Len(Dir$(aFile)) > 0 Then
Kill aFile
End If
In VB è normalmente Dir
per trovare la directory del file. Se non è vuoto, esiste e quindi usa Kill
per eliminare il file.
test = Dir(Filename)
If Not test = "" Then
Kill (Filename)
End If
impostare un riferimento alla libreria Scripting.Runtime e quindi utilizzare FileSystemObject:
Dim fso as New FileSystemObject, aFile as File
if (fso.FileExists("PathToFile")) then
aFile = fso.GetFile("PathToFile")
aFile.Delete
End if
Ecco un suggerimento: stai riutilizzando il nome del file o stai pianificando di fare qualcosa che richiede la cancellazione immediata?
No?
Puoi ottenere VBA per eseguire il comando DEL "C:\TEMP\scratchpad.txt"/F dal comando Prompt in modo asincrono usando VBA.Shell:
Shell "DEL" & chr (34) & strPath & chr (34) & "/ F", vbHide
Nota le doppie virgolette (carattere ASCII 34) attorno al nome del file: suppongo che tu abbia un percorso di rete o un nome file lungo contenente spazi.
Se si tratta di un file di grandi dimensioni o si trova su una connessione di rete lenta, la soluzione è Fire-and-forget. Certo, non vedrai mai se ha funzionato o meno; ma riprendi immediatamente il tuo VBA e ci sono momenti in cui è meglio che aspettare la rete.
È possibile impostare un riferimento alla libreria Scripting.Runtime e quindi utilizzare FileSystemObject. Ha un metodo DeleteFile e un metodo FileExists.
Vedi l'articolo MSDN qui .