जवाबों:
1.) यहां देखें । मूल रूप से ऐसा करें:
Function FileExists(ByVal FileToTest As String) As Boolean
FileExists = (Dir(FileToTest) <> "")
End Function
मैं आपको विभिन्न त्रुटि से निपटने के लिए यह पता लगाने के लिए छोड़ दूंगा लेकिन ये उन चीजों को संभालने में त्रुटि के बीच हैं जिन पर मैं विचार कर रहा हूं:
2.) किसी फाइल को कैसे डिलीट करें। इसे देखो । मूल रूप से किल कमांड का उपयोग करें, लेकिन आपको केवल-पढ़ने के लिए फ़ाइल की संभावना के लिए अनुमति देने की आवश्यकता है। यहाँ आप के लिए एक समारोह है:
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
फिर से, मैं आपसे निपटने में त्रुटि छोड़ दूंगा और फिर से इन चीजों पर विचार करूंगा:
यह एक निर्देशिका बनाम एक फ़ाइल के लिए अलग तरह से व्यवहार करना चाहिए? क्या उपयोगकर्ता को स्पष्ट रूप से यह बताना होगा कि वे एक निर्देशिका को हटाना चाहते हैं?
क्या आप चाहते हैं कि कोड स्वचालित रूप से रीड-ओनली विशेषता को रीसेट कर दे या उपयोगकर्ता को किसी प्रकार का संकेत दिया जाए कि रीड-ओनली विशेषता सेट हो?
संपादित करें: इस उत्तर को समुदाय विकि के रूप में चिह्नित करना ताकि कोई भी इसे ज़रूरत पड़ने पर संशोधित कर सके।
ब्रेटस्की के उत्तर को कोड करने का एक वैकल्पिक तरीका, जिसके साथ मैं अन्यथा पूरी तरह सहमत हूं, हो सकता है
With New FileSystemObject
If .FileExists(yourFilePath) Then
.DeleteFile yourFilepath
End If
End With
समान प्रभाव लेकिन कम (अच्छी तरह से, कोई भी नहीं) चर घोषणाएं।
FileSystemObject एक बहुत ही उपयोगी उपकरण है और इसके साथ अनुकूल होने के लायक है। कुछ और के अलावा, पाठ फ़ाइल लेखन के लिए यह वास्तव में कभी-कभी विरासत विकल्प से तेज हो सकता है, जो कुछ लोगों को आश्चर्यचकित कर सकता है। (मेरे अनुभव में कम से कम, YMMV)।
मैं शायद इसके लिए आग बबूला हो जाऊंगा, लेकिन अगर आप इसे हटाने जा रहे हैं, तो अस्तित्व के परीक्षण की बात क्या है? मेरे प्रमुख पालतू जानवरों में से एक एक ऐसा ऐप है जो त्रुटि संवाद को कुछ इस तरह से फेंक रहा है जैसे "फ़ाइल को नष्ट नहीं कर सकता, यह मौजूद नहीं है!"
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.
यदि फ़ाइल पहले स्थान पर मौजूद नहीं है, तो मिशन पूरा हुआ!
ActiveWorkbook.SaveCopyAs
करना अधिलेखित करने में सक्षम नहीं है, इसलिए आपको पहले फ़ाइल नाम के साथ मौजूदा फ़ाइल को निकालना होगा।
On Error Resume Next
, या इसलिए मुझे बताया गया है: निश्चित रूप से, यह हास्यास्पद सलाह है, और आपका उत्तर सही है।
Len(dir(...))
भाग में केवल होने की जाँच करने के लिए नहीं है। यह भी जाँच रहा है कि क्या फ़ाइल छिपाई गई है क्योंकि एक छिपी हुई फ़ाइल मौजूद होने पर भी एक खाली स्ट्रिंग वापस आ जाएगी (और आप इसे हटा नहीं पाएंगे) Dir(hiddenFile) = ""
:। इसलिए, SetAttr FileToDelete, vbNormal
वाक्पटु हिस्सा आपके लिए इसका ध्यान रखता है।
फ़ाइल के अस्तित्व के लिए परीक्षण करने के लिए और फिर इसे हटाने के लिए निम्नलिखित का उपयोग किया जा सकता है।
Dim aFile As String
aFile = "c:\file_to_delete.txt"
If Len(Dir$(aFile)) > 0 Then
Kill aFile
End If
Len()
(और LenB()
, जो कि और भी तेज है) स्ट्रिंग तुलना की तुलना में तेज है स्मृति में, वीबी स्ट्रिंग्स उनकी लंबाई से पहले हैं। लेन / लेनब सिर्फ उस स्मृति स्थान से लंबाई खींचते हैं, उन्हें इसकी लंबाई जानने के लिए स्ट्रिंग के माध्यम से पुनरावृति नहीं करना पड़ता है। दूसरी ओर, स्ट्रिंग तुलना का उपयोग करने के लिए बहुत अधिक काम करना है। इसके अतिरिक्त, ""
VB में उपयोग करने से बचें क्योंकि यह हमेशा एक नया स्ट्रिंग आवंटित करता है। vbNullString
इसके बजाय उपयोग करें क्योंकि यह एक स्थिर है और अधिक मेमोरी का उपयोग नहीं करता है।
Scripting.Runtime लाइब्रेरी का संदर्भ सेट करें और फिर FileSystemObject का उपयोग करें:
Dim fso as New FileSystemObject, aFile as File
if (fso.FileExists("PathToFile")) then
aFile = fso.GetFile("PathToFile")
aFile.Delete
End if
यहां एक टिप दी गई है: क्या आप फ़ाइल नाम का फिर से उपयोग कर रहे हैं, या कुछ ऐसा करने की योजना बना रहे हैं जिसे तुरंत हटाने की आवश्यकता है?
नहीं?
आप कमांड को आग लगाने के लिए VBA प्राप्त कर सकते हैं DEL "C: \ TEMP \ scratchpad.txt" / F कमांड प्रॉम्प्ट से asynchronously का उपयोग करके VBA.Shell:
शैल "DEL" और chr (34) और strPath और chr (34) और "/ F", vbHide
फ़ाइल नाम के आस-पास डबल-कोट्स (ASCII वर्ण 34) पर ध्यान दें: मैं मान रहा हूं कि आपको एक नेटवर्क पथ या रिक्त स्थान वाला एक लंबा फ़ाइल नाम मिला है।
यदि यह एक बड़ी फ़ाइल है, या यह एक धीमे नेटवर्क कनेक्शन पर है, तो आग-और-भूल जाने का रास्ता है। बेशक, आपको यह देखने के लिए कभी नहीं मिलेगा कि यह काम किया है या नहीं; लेकिन आप तुरंत अपने VBA को फिर से शुरू करते हैं, और ऐसे समय होते हैं जब यह नेटवर्क के लिए इंतजार करने से बेहतर है।
आप Scripting.Runtime लाइब्रेरी का संदर्भ सेट कर सकते हैं और फिर FileSystemObject का उपयोग कर सकते हैं। इसमें एक DeleteFile विधि और एक FileExists विधि है।
MSDN लेख यहाँ देखें ।