Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / VB

Folder Coder

3.90/5 (6 votes)
11 Dec 2007CPOL 1   560  
A way to convert a folder into a file...

Image 1

The beginning...

Well, it's all my sister's fault... she told me she'd give me an 'Independent' sign if I make her an app that locks folders... so what could I do...?

The code

Basically, this is the code that I use to encode a selected folder...

VB
Private Sub Code()
    Try
        'prepares the writer to write
        Dim fs As New FileStream("C:\Mitio\Locked.log",
            FileMode.Append)
        Dim sw As New StreamWriter(fs)
        ' sets the progressbar max value
        ProgressBar1.Maximum = lb.Items.Count

        For Each obj As Object In lb.Items
            Dim name As String = My.Computer.FileSystem.GetName(
                obj.ToString)
            Dim bytes() As Byte
            ' reads the bytes from the specified fie & stores them in
            ' the array
            bytes = My.Computer.FileSystem.ReadAllBytes(obj.ToString)

            Dim bn As Integer = bytes.Length ' gets the length of the bytes
            ' appends the bytes of the array to the newly created
            ' Locked.locked file
            My.Computer.FileSystem.WriteAllBytes(
                "C:\Mitio\Locked.Locked", bytes, True) 

            'writes the name of the file and the length of the
            'binaries in it
            sw.WriteLine(bn.ToString + "*" + name) 

            ProgressBar1.Value += 1 ' performs a step

        Next
        lb.Items.Clear() 'clears the list

        sw.Close() 'closes the writer

        fs.Close() 'and the file

        ProgressBar1.Value = 0 ' resets the  progressbar

    Catch ex As Exception
        ' if anything happens, you will be gently informed :D
        MsgBox(ex.Message)

    End Try
End Sub

And I think there's not much to it...

And this is the code to decode the folder:

VB
Private sub Decode()
    Try
        Dim bf As New FileStream("C:\Mitio\Locked.locked", 
            FileMode.Open, FileAccess.Read, FileShare.Inheritable)
        Dim br As BinaryReader ' opens the LOCKED file

        Dim sf As New FileStream("C:\Mitio\Locked.log", 
            FileMode.Open)
        Dim sr As New StreamReader(sf) ' Opens the LOG file

        Dim s As String = sr.ReadLine
        lb.Items.Add(CObj(s))
        While Not s Is "" ' adds all files from the LOG file

            s = sr.ReadLine
            If s = "" Then Exit While
            lb.Items.Add(CObj(s))
        End While
        Label1.Text = lb.Items.Count
        sr.Close() ' closes the LOG file

        sf.Close()
        Dim j As Integer = 0
        br = New BinaryReader(bf)
        Dim i As Integer = 0
        pb2.Maximum = Label1.Text
        For Each obj As Object In lb.Items
            pb2.Value += 1 ' performs step

            Dim ss() As String = obj.ToString.Split("*") 'spit 

            Dim bytes As Integer = ss(0) 'the binaries

            Dim name As String = (ss(1)) 'and the filename 
            'creates a new file with the name from the list
            Dim bf1 As New FileStream(txtOut.Text + name, FileMode.Append, 
                FileAccess.Write, FileShare.Write)

            Dim bw As New BinaryWriter(bf1)
            Try
                For i = 1 To CInt(bytes)
                    'writes the number of bytes for each file
                    bw.Write(br.ReadByte()) 

                Next
            Catch ex As Exception
                MsgBox(ex.Message) ' again if something happens...

            End Try
            bw.Close() 'close...

            bf1.Close()
        Next
        br.Close() 'and close again

        bf.Close()
        lb.Items.Clear() 'clears the list again

        pb2.Value = 0 ' resets the progressbar

    Catch ex As Exception
        MsgBox(ex.Message) 'ohh

    End Try
End Sub

After all

It's not finished properly yet, but I'll keep in touch...

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)