Minggu, 01 Mei 2011

10

[VB.NET] Belajar Membuat Program File Scanner

  • Minggu, 01 Mei 2011
  • Nurkholish Ardi Firdaus
  • Alhamdulillah, ini adalah postingan pertama saya setelah 1 minggu vakum setelah UN. Sebenarnya UN nya sudah selesai 1 minggu yang lalu, tetapi saya baru menyempatkan posting sekarang. Oke daripada kebanyakan omong, kita mulai saja rapat kali ini ^_^. Sebelumnya saya pernah mempostingkan bagaimana cara membuat Program Virus Scanner Sederhana, tetapi ternyata metode scan nya sangatlah lambat dan merepotkan. Nah kali ini saya akan membuat Program File Scanner yang mana metodenya lumanyan lebih cepat dan tidak memberatkan RAM. Mari kita lihat bagaimana?.



    Buatlah proyek baru dengan 1 Form

    Deklarasi:
    1 Form
    2 Button
    2 TextBox
    1 ComboBox
    5 Label
    1 Timer
    

    Buatlah sedemikian rupa seperti ini sesuai keterangan dibawahnya:



    Keterangan
    1: ComboBox
     Name: cboDir
     DropDownStyle: DropDownList
    2: Button
     Name: cmdBrowse
     Text: "Browse"
    3: Button
     Name: cmdScan
     Text: "Scan"
    4: TextBox
     Name: txtCurrDir
     MultiLine: True
     ScrollBars: Vertical
    5: Label
     Name: lblSpeed
     Text: "Speed:"
    6: TextBox
     Name: txtCurrFile
    7: Label
     Name: lblScanned
     Text: "Scanned:"
    8: Label
     Name: lblUnscanned
     Text: "Unscanned:"
    9: Label
     Name: Label1
     Text: "Current Folder"
    10: Label
     Name: Label2
     Text: "Current File"
    11: Timer
     Name: tmrSpeedo
     Enabled: False
     Interval: 1000

    Terakhir masukkan source codenya:

    Source Code Form1

    ' Program file scanner sederhana
    ' coded by nurkholish ardi f
    ' www.cr0wja.co.cc
    Imports Microsoft.VisualBasic.FileSystem
    Imports Microsoft.VisualBasic.Strings
    Public Class Form1
    
        Dim Scanned As UInt64
        Dim Unscanned As UInt64
        Dim ScannedBefore As UInt64
        Dim RunScan As Boolean
    
        Private Sub cmdScan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdScan.Click
            If cboDir.Text = "" Then Exit Sub
            If cmdScan.Text = "Scan" Then
                Turn(True)
                ScanDir(cboDir.Text, True)
                If cmdScan.Text = "Stop" Then ShowRes()
            Else
                ShowRes()
            End If
            Turn(False)
        End Sub
    
        Private Sub Turn(ByVal switch As Boolean)
            Scanned = 0
            Unscanned = 0
            ScannedBefore = 0
            tmrSpeedo.Enabled = switch
            RunScan = switch
            txtCurrDir.Text = ""
            txtCurrFile.Text = ""
            lblScanned.Text = "Scanned: "
            lblSpeed.Text = "Speed: "
            cmdBrowse.Enabled = Not switch
            cboDir.Enabled = Not switch
            If switch Then
                cmdScan.Text = "Stop"
            Else
                cmdScan.Text = "Scan"
            End If
        End Sub
    
        Private Sub ShowRes()
            MsgBox("Done, " & Scanned & " file(s) scanned, " & Unscanned & " file(s) unscanned", MsgBoxStyle.Information, "Done")
        End Sub
    
        Private Sub cmdBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBrowse.Click
            Dim OpenDirDlg As New FolderBrowserDialog
            With OpenDirDlg
                .ShowDialog()
                If .SelectedPath <> Nothing Then
                    cboDir.Items.Add(.SelectedPath)
                    cboDir.Text = .SelectedPath
                End If
            End With
            OpenDirDlg = Nothing
        End Sub
    
        Private Sub ScanDir(ByVal dirpath As String, ByVal subdirs As Boolean)
            If Not RunScan Then Exit Sub
            Application.DoEvents()
            If Strings.Right(dirpath, 1) <> "\" Then dirpath &= "\"
            Dim CurrFile As String
            Dim value As Int32
            CurrFile = Microsoft.VisualBasic.Dir(dirpath)
            Do While CurrFile <> ""
                value = ScanFile(dirpath & CurrFile)
                Scanned += value
                Unscanned += IIf(value = 1, 0, 1)
                txtCurrFile.Text = CurrFile
                txtCurrDir.Text = dirpath
                lblScanned.Text = "Scanned: " & Scanned & " file(s)"
                lblUnscanned.Text = "Unscanned: " & Unscanned & " file(s)"
                CurrFile = Microsoft.VisualBasic.Dir
            Loop
    
            If subdirs Then
                For Each SubDir As String In FileIO.FileSystem.GetDirectories(dirpath, FileIO.SearchOption.SearchTopLevelOnly)
                    Try
                        ScanDir(SubDir, True)
                    Catch ex As Exception
    
                    End Try
                Next
            End If
        End Sub
    
        Private Function ScanFile(ByVal filepath As String) As Int32
            If Not RunScan Then Exit Function
            Application.DoEvents()
            Try
                Dim OpenFile As New IO.StreamReader(filepath)
                '==========================================
                ' Disini agan bisa menambahkan code yang selanjutnya, setelah akses stream file reader terbuka
                ' bisa berupa mencari bit pada file, mendapatkan hash md5 nya atau sebagainya
                ' sesuai keinginan agan
                '==========================================
                OpenFile.Close()
                Return 1
            Catch ex As Exception
                ' jika terjadi error
                Return 0
            End Try
        End Function
    
        Private Sub tmrSpeedo_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrSpeedo.Tick
            If ScannedBefore = 0 Then
                ScannedBefore = Scanned
            Else
                lblSpeed.Text = "Speed: " & (Scanned - ScannedBefore) & " file/s"
                ScannedBefore = Scanned
            End If
        End Sub
    
    End Class

    Dan setelah saya coba Run, kecepatan scan nya lumayan nih.


    Tetapi itu belum ada code yang akan dijalankan pada setiap file yang akan di scan, mungkin jika agan menambahkan code seperti mengambil hash MD5 nya mungkin kecepatan akan semakin lambat tergantung banyaknya tugas yang dilaksanakan.

    Nah, sampai sekian dulu. Seperti biasanya jika agan malas membuatnya, agan bisa mendownload source codenya dibawah ini.

    Crowja-Coderz


    Subscribe