Skip to main content

Menghapus File Menggunakan FileSystemObject

Kemampuan FileSystemObject untuk menghapus file memungkinkan kita untuk membuat kode VBA di Access yang secara otomatis akan menghapus file yang sesuai dengan keinginan. Dengan menggunakan proses searching yang dilakukan melalui statement for each... next, maka kita dapat memilih kriteria file yang ingin dihapus secara serentak. Hal ini berbeda bila kita melakukannya melalui Windows Explorer yang tidak bisa menghapus file yang berada di beberapa folder secara serentak.

Sebagai contoh, menghapus file dengan ekstensi .tmp yang merupakan file temporer dan berada di berbagai macam folder. Nah, dengan menuliskan kode VBA yang tepat, maka kita bisa menghapus file-file itu. Contoh lainnya adalah menghapus file yang mempunyai pola-pola tertentu dan tersebar di beberapa folder. Pola tertentu itu misalnya mempunyai awalan tt*, tx*, dan sebagainya dengan ekstensi file yang mungkin berbeda pula.

Di MS Access, kita dapat menghapus file melalui FileSystemObject dengan menggunakan metode DeleteFile. Parameter yang dibutuhkan adalah nama path beserta dan nama filenya. Selain itu, ada parameter optional yang disebut parameter Force yang nilainya True atau False. Secara default, parameter Force ini bernilai False. Artinya, bila sebuah file mempunyai atribut read-only, maka file bersangkutan tidak bisa dihapus, karena Force bernilai False. Nah, bila parameter Force diisi dengan nilai True, maka file dengan atribut apapun bisa dihapus.
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile("D:\TesFolder\TesHapusData.txt")
Contoh di atas adalah metode DeleteFile yang menghapus file TesHapusData.txt. Bila ternyata atribut file TesHapusData.txt adalah read-only, maka file ini tidak bisa dihapus. Untuk menghapusnya, tambahkan parameter Force dengan nilai True seperti berikut ini:
objFSO.DeleteFile("D:\TesFolder\TesHapusData.txt"), True

Menghapus beberapa macam file sekaligus

Seperti sudah dijelaskan di atas, metode DeleteFile dengan FileSystemObject di MS Access VBA mampu menghapus beberapa macam file sekaligus secara bersamaan. Selain contoh yang sudah dijelaskan di awal, ada beberapa contoh lain yang bisa menjelaskan metode ini.

Sebagai misal, setiap akhir periode tertentu, kita ingin menghapus file log yang mungkin tidak diperlukan lagi. Biasanya, log file akan dihapus jika tidak ada kejadian yang luar biasa yang memaksa seorang administrator sistem/jaringan membutuhkan dan membuka file log itu, Umumnya, file log yang usia 3 bulan ke atas akan dihapus dari sistem. File log yang ingin dihapus berisi log file dari setiap pengguna yang mengakses ke server dan berada di setiap folder dari setiap pengguna. Jadi, misalkan di server Akunting terdapat 3 orang pengguna dengan nama pengguna: UserA, UserB, UserC, maka akan ada 3 folder dalam server Akunting itu yaitu folder UserA, UserB, dan UserC. Di setiap folder berisi file log dengan urutan sebagai berikut:
  1. Folder UserA:
    1. LogUserA201601.txt
    2. LogUserA201512.txt
    3. LogUserA201511.txt
    4. LogUserA201510.txt
  2. Folder UserB:
    1. LogUserB201601.txt
    2. LogUserB201512.txt
    3. LogUserB201511.txt
    4. LogUserB201510.txt
  3. Folder UserC:
    1. LogUserC201601.txt
    2. LogUserC201512.txt
    3. LogUserC201511.txt
    4. LogUserC201510.txt
2015 dan 2016 adalah angka tahun, sedangkan 10,11,12, dan 01 adalah angka bulan. Jadi LogUserC201510.txt berarti log book untuk UserC tahun 2015 bulan 10 (Oktober)
.
Penggunaan karakter wildcard membantu kita untuk menghapus satu atau lebih file dalam sebuah folder. Dengan menggunakan contoh folder di atas, bila ingin menghapus semua file yang mempunyai ekstensi .txt di folder D:\User\UserA, maka gunakan metode DeleteFolder sebagai berikut:
objFSO.DeleteFile("D:\User\UserA\*.txt"), True
Untuk menghapus file yang mempunyai huruf "2015" di folder D:\User\UserA, maka gunakan metode DeletFolder sebagai berikut:
objFSO.DeleteFile("D:\User\UserA\*2015.* "), True
Bila ingin menghapus sejumlah file yang berada di sejumlah folder, maka kita harus melakukan iterasi dengan menggunakan program rekursi. Dengan menggunakan folder di atas, misalkan kita ingin menghapus file yang sudah tersimpan lebih dari tiga bulan. Pada contoh di atas, ada beberapa file yang tersebar di beberapa folder. Untuk menghapus file yang sudah tersimpan lebih dari 3 bulan, maka gunakan fungsi hapusFile sebagai berikut:
Function hapusFile(strNamaPath As String)
'------------------------------------------
' Fungsi untuk menghapus file dengan menggunakan metode DeleteFolder
' Metode DeleteFolder mirip dengan Disk Cleanup
' Jadi, jangan dipergunakan sembarangan,
' karena file yang sudah dihapus tidak bisa di-restore
' bahkan tidak ada di Recycle Bin
'------------------------------------------
  Dim objFSO, objFolder, colSubfolders, objFile As Object
  Dim arrNamaFile() As String, strFileHapus As String
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  If Not objFSO.FolderExists(strNamaPath) Then
    Debug.Print strNamaPath & " tidak ada"
    Cancel = True
    Exit Function
  End If
  Set objFolder = objFSO.GetFolder(strNamaPath)
  Set colSubfolders = objFolder.SubFolders
  For Each objSubFolder In colSubfolders
    For Each objFile In objSubFolder.Files
      If DateDiff("m", objFile.DateLastModified, Now) > 3 Then
        strFileHapus = objFile.Path
        objFSO.DeleteFile (objFile.Path), True
        Debug.Print strFileHapus & " dihapus."
      End If
    Next objFile
    hapusFile objSubFolder.Path
  Next
End Function
Pada kode VBA di atas, maka kriteria yang diperlukan untuk menghapus ada di baris 21. Pada baris ini, kita bisa menuliskan pernyataan if... yang sesuai dengan keinginan. Pada baris 21 di atas, pernyataan "If DateDiff("m", objFile.DateLastModified, Now) > 3 Then" mempunyai arti: bila file telah tersimpan lebih dari tiga bulan maka....lanjut ke baris 22 yang merupakan metode DeleteFile. Gambar beriku ini adalah contoh metode DeleteFile di Immediate Window:


Gambar 1. Metode DeleteFile menghapus file yang sudah tersimpan selama 3 bulan atau lebih


Bila ingin menghapus file yang mempunyai huruf "2015" di folder D:\User, maka baris ke 21 harus diganti menjadi:
If InStr(1, objFile.Name, "2015") Then
InStr adalah fungsi untuk mencari sepenggal teks (string character) dalam sebuah teks. Pada contoh di atas, 2015 adalah sepenggal teks yang ingin dicari, sedangkan objFile.Name adalah nama file yang merupakan teks yang utuh. Untuk folder D:\User\UserA, nama file dalam folder itu ada empat di mana tiga di antaranya terdapat huruf "2015", yaitu LogUserA201512.txt, LogUserA201511.txt, dan LogUserA201510.txt. Ketiga file inilah yang akan dihapus oleh metode DeleteFile. Demikian pula untuk folder D:\User\UserC dan D:\User\UserC yang masing-masing juga punya tiga file yang akan dihapus, seperti tampak pada gambar di bawah ini.

Gambar 1.Metode DeleteFile menghapus file yang mempunyai angka 2015.

Kita bisa menghapus file dengan membuat kombinasi antara penggunaan wildcard dan iterasi di atas. Caranya adalah dengan menempatkan metode DeleteFile yang berisi wildcard sedemikian rupa ke dalam iterasi folder seperti fungsi berikut ini.
Function hapusFileWildCard(strNamaPath As String, strWC As String)
'------------------------------------------
' Fungsi untuk menghapus file dengan menggunakan metode DeleteFolder
' Metode DeleteFolder mirip dengan Disk Cleanup
' Jadi, jangan dipergunakan sembarangan,
' karena file yang sudah dihapus tidak bisa di-restore
' bahkan tidak ada di Recycle Bin
'------------------------------------------
  Dim objFSO, objFolder, colSubfolders, objFile As Object
  Dim arrNamaFile() As String, strFileHapus As String
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  If Not objFSO.FolderExists(strNamaPath) Then
    Debug.Print strNamaPath & " tidak ada"
    Cancel = True
    Exit Function
  End If
  Set objFolder = objFSO.GetFolder(strNamaPath)
  Set colSubfolders = objFolder.SubFolders
  For Each objSubFolder In colSubfolders
    If Dir(objSubFolder.Path & "\" & strWC) <> vbNullString Then
      objFSO.DeleteFile (objSubFolder.Path & "\" & strWC), True
      Debug.Print objSubFolder.Path & "\" & strWC
    End If
    hapusFileWildCard objSubFolder.Path, strWC
  Next
End Function
Bila dijalankan melalui Immediate Window, hasilnya tampak seperti gambar di bawah ini.

Gambar 1.Metode DeleteFile menghapus file yang mempunyai wildcard.


Fungsi hapusFileWildCard("D:\User", "*.txt") menghapus file dengan wildcard *.txt yang berada di folder D:\User. Dengan demikian seluruh file yang berekstensi .txt dengan nama apa pun di folder D:\User akan dihapus.

Kesimpulan

Dengan menggunakan beberapa contoh di atas, kita akan memperoleh ide/inspirasi bagaimana menghapus file yang mempunyai pola tertentu. Selain pola yang sudah dijelaskan di atas, kita juga bisa menghapus file dengan pola lainnya, seperti file yang mempunyai atribut hidden, ekstensi *.tmp, tanggal file itu dibuat, ukuran file, dan sebagainya. Selain menghapus file yang mempunyai atribut atau properti tertentu, kita bisa juga menghapus file yang TIDAK mempunyai atribut atau properti tertentu. Caranya kurang lebih sama seperti contoh di atas, tetapi dibalik.

Hal yang perlu diinformasikan di sini, metode DeletFile akan menghapus file yang tersimpan dalam media penyimpanan tanpa bisa dikembalikan lagi, seperti yang bisa dilakukan melalui Windows Explorer/Recycle Bin (restore deleted file). Jadi gunakanlah metode DeleteFile dengan bijak.

Comments

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Relasi Database

Menampilkan Data MySQL dalam Form di Access