سؤال

باستخدام VBA, كيف يمكنني:

  1. اختبار ما إذا كان الملف موجود و إذا كان الأمر كذلك ،
  2. حذفه ؟
هل كانت مفيدة؟

المحلول

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

مرة أخرى, سوف أترك معالجة الخطأ لك مرة أخرى هذه هي الأشياء التي كنت تنظر:

  • أن تتصرف بشكل مختلف عن الدليل مقابلملف ؟ يجب أن يكون لدى المستخدم صراحة يجب أن تشير إلى أنها تريد حذف الدليل ؟

  • هل تريد الكود تلقائيا إعادة تعيين السمة للقراءة فقط أو يجب أن يكون المستخدم بالنظر إلى نوع من إشارة إلى أن السمة للقراءة فقط هو ؟


تحرير:بمناسبة هذا الجواب كما ويكي المجتمع بحيث يمكن لأي شخص تعديله إذا لزم الأمر.

نصائح أخرى

طريقة بديلة رمز Brettski الجواب الذي لا يتفق على خلاف ذلك تماما ، قد يكون

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.

إذا كان الملف غير موجود في المقام الأول ، المهمه!

التالية يمكن استخدامها لاختبار وجود الملف ثم حذفه.

Dim aFile As String
aFile = "c:\file_to_delete.txt"
If Len(Dir$(aFile)) > 0 Then
     Kill aFile
End If 

في VB لها عادة Dir العثور على دليل من الملف.إذا إنها ليست فارغة ثم كان موجودا ثم استخدام Kill للتخلص من الملف.

test = Dir(Filename)
If Not test = "" Then
    Kill (Filename)
End If

تعيين مرجع إلى البرمجة.مكتبة وقت التشغيل ومن ثم استخدام FileSystemObject:

Dim fso as New FileSystemObject, aFile as File

if (fso.FileExists("PathToFile")) then
    aFile = fso.GetFile("PathToFile")
    aFile.Delete
End if

وإليك نصيحة:هل إعادة استخدام اسم ملف أو التخطيط لفعل شيء ما يتطلب الحذف فورا ؟

لا ؟

يمكنك الحصول على VBA إلى النار الأوامر ديل "C: EMP\scratchpad.txt" /و من موجه الأوامر بشكل غير متزامن باستخدام VBA.شل:

شل "ديل" & chr(34) & strPath & chr(34) & "/و " vbHide

ملاحظة انقر نقرا مزدوجا ونقلت (حرف ASCII 34) حول اسم الملف:أنا على افتراض أن كنت قد حصلت شبكة مسار أو اسم ملف طويل يحتوي على مسافات.

إذا كان ملف كبير أو على شبكة اتصال بطيء ، النار وننسى هو الطريق للذهاب.بالطبع أنت لن تحصل على معرفة ما إذا كان هذا يعمل أو لا ؛ ولكن استئناف VBA الخاص بك على الفور, و هناك أوقات عندما يكون هذا هو أفضل من انتظار الشبكة.

يمكنك تعيين إشارة إلى البرمجة.مكتبة وقت التشغيل ومن ثم استخدام FileSystemObject.فقد DeleteFile طريقة FileExists الأسلوب.

انظر المقالة MSDN هنا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top