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.
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:
.
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:
Bila ingin menghapus file yang mempunyai huruf "2015" di folder D:\User, maka baris ke 21 harus diganti menjadi:
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.
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.
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.
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:
- Folder UserA:
- LogUserA201601.txt
- LogUserA201512.txt
- LogUserA201511.txt
- LogUserA201510.txt
- Folder UserB:
- LogUserB201601.txt
- LogUserB201512.txt
- LogUserB201511.txt
- LogUserB201510.txt
- Folder UserC:
- LogUserC201601.txt
- LogUserC201512.txt
- LogUserC201511.txt
- LogUserC201510.txt
.
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"), TrueUntuk menghapus file yang mempunyai huruf "2015" di folder D:\User\UserA, maka gunakan metode DeletFolder sebagai berikut:
objFSO.DeleteFile("D:\User\UserA\*2015.* "), TrueBila 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 FunctionPada 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") ThenInStr 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 FunctionBila 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
Post a Comment