VBA kullanarak nasıl yapabilirim:
1.) Kontrol burada . Temelde bunu yapın:
Function FileExists(ByVal FileToTest As String) As Boolean
FileExists = (Dir(FileToTest) <> "")
End Function
İhtiyaç duyduğunuz çeşitli hata işlemlerini çözmeniz için size bırakacağım ancak bunlar dikkate almayı düşündüğüm hata işlemeler arasında:
2.) Bir Dosya Nasıl Silinir. this. Temelde Kill komutunu kullanın, ancak dosyanın salt okunur olması için izin vermeniz gerekir. İşte sizin için bir fonksiyon:
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
Yine, hatayı size taşıma hatası bırakacağım ve tekrar düşündüğüm şeyler bunlar:
Bu bir dosyaya karşı bir dizin için farklı davranmalı mı? Bir kullanıcının bir dizini silmek istediğini açıkça belirtmesi gerekir mi?
Kodun salt okunur özniteliği otomatik olarak sıfırlamasını mı istiyorsunuz yoksa kullanıcıya salt okunur özniteliğin ayarlandığına dair bir tür gösterge belirtilmeli mi?
EDIT: Bu cevabı topluluk wiki olarak işaretler, böylece herhangi biri gerektiğinde değiştirebilir.
Tamamen aynı fikirdeyim ki, Brettski'nin cevabını kodlamanın alternatif bir yolu olabilir:
With New FileSystemObject
If .FileExists(yourFilePath) Then
.DeleteFile yourFilepath
End If
End With
Aynı etki ancak daha az (hiç de yok) değişken bildirimleri.
FileSystemObject gerçekten faydalı bir araçtır ve arkadaşça davranmaya değer. Her şeyden başka, metin dosyası yazmak için, bazen birkaç kişiyi şaşırtabilecek eski alternatiflerden daha hızlı olabilir. (Benim tecrübeme göre, en azından, YMMV).
Muhtemelen bunun için alev alacağım, ama sadece onu silecekseniz varoluş testi nedir? Başlıca evcil hayvan eşlerimden biri, "Dosya silinemedi, yok!" Gibi bir hata iletişim kutusu atan bir uygulama.
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.
Dosya ilk etapta yoksa, görev tamamlandı!
Bir dosyanın varlığını sınamak ve sonra silmek için aşağıdakiler kullanılabilir.
Dim aFile As String
aFile = "c:\file_to_delete.txt"
If Len(Dir$(aFile)) > 0 Then
Kill aFile
End If
VB içinde normal olarak Dir
ile dosyanın dizinini bulabilirsiniz. Boş değilse, o zaman var olur ve dosyadan kurtulmak için Kill
öğesini kullanın.
test = Dir(Filename)
If Not test = "" Then
Kill (Filename)
End If
Scripting.Runtime kütüphanesine bir referans ayarlayın ve ardından FileSystemObject öğesini kullanın:
Dim fso as New FileSystemObject, aFile as File
if (fso.FileExists("PathToFile")) then
aFile = fso.GetFile("PathToFile")
aFile.Delete
End if
İşte size bir ipucu: Dosya adını yeniden mi kullanıyorsunuz yoksa derhal silinmesi gereken bir şey mi yapmayı planlıyorsunuz?
Hayır?
VBA'yı DEL "C:\TEMP\scratchpad.txt"/F komutunu İstemi asenkronize komutunu kullanarak VBA.Shell kullanarak çalıştırabilirsiniz:
Shell "DEL" ve chr (34) ve strPath ve chr (34) & "/ F", vbHide
Dosya adı etrafındaki çift tırnak işaretlerine (ASCII karakter 34) dikkat edin: Bir ağ yolunun veya boşluk içeren uzun bir dosya adınız olduğunu farz ediyorum.
Büyük bir dosyaysa veya ağ bağlantınız yavaşsa, ateşle ve unut gitsin. Elbette, bunun işe yarayıp yaramadığını asla göremezsiniz; ancak VBA’nı derhal sürdürürsünüz ve bunun ağı beklemekten daha iyi olduğu zamanlar vardır.
Scripting.Runtime kütüphanesine bir referans ayarlayabilir ve ardından FileSystemObject öğesini kullanabilirsiniz. Bir DeleteFile yöntemi ve bir FileExists yöntemi vardır.
MSDN makalesine bakın burada .