Solved

Help adding files to a ZIP function

Posted on 2009-04-13
7
235 Views
Last Modified: 2012-05-06
I found a script on a forum that allows a user to click a button, select a folder from a FolderBrowserDialog, and create a ZIP file from that folder.

I need to modify that function to cycle through a small set of checkboxes and based on the selections, add each corresponding folder/file that is checked to the new ZIP.

My problem is that being my second week in Visual Basic, I'm still too great to know where to start.

The code that I have currently is listed below.
Private Sub ButtonGatherLogs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonGatherLogs.Click

        Dim FolderOneString As String

        Dim FolderTwoString As String

        Dim SingleFileString As String

        Dim srcfolderString As String

        Dim dstfolderString As String = (My.Computer.FileSystem.SpecialDirectories.Desktop + "\Logs.zip")

 

        'get folder to zip

        If CheckBoxFolderOneDirectory.CheckState = CheckState.Checked Then

            'Add FolderOne to ZIP

            FolderOneString = (My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData + "\FolderOne")

        End If

        If CheckBoxFolderTwo.CheckState = CheckState.Checked Then

            'Add FolderTwoDirectory to ZIP

            FolderTwoString = (My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData + "\FolderTwo")

        End If

        If CheckBoxSingleFile.CheckState = CheckState.Checked Then

            'Add console log to ZIP

            SingleFile = (My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData + "\file.log")

        End If

 

        srcfolderString = 'Add each string above to the list based on checkbox selection

 

        If srcfolderString = "" Then Exit Sub

 

        'create empty zip file

        Dim fileContents() As Byte = {80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

        My.Computer.FileSystem.WriteAllBytes(dstfolderString, fileContents, False)

 

        Dim objShell As New Shell32.ShellClass

        Dim objFolderSrc As Shell32.Folder

        Dim objFolderDst As Shell32.Folder

        Dim objFolderItems As Shell32.FolderItems

 

        objFolderSrc = objShell.NameSpace(srcfolderString)

        objFolderDst = objShell.NameSpace(dstfolderString)

        objFolderItems = objFolderSrc.Items

        objFolderDst.CopyHere(objFolderItems, 20)

 

    End Sub

Open in new window

0
Comment
Question by:Syncer
  • 3
  • 2
7 Comments
 
LVL 96

Expert Comment

by:Bob Learned
ID: 24153540
What kind of help can I provide for you?
0
 

Author Comment

by:Syncer
ID: 24153595
How can I pass multiple paths to srcStringFolder and it add all passed to the ZIP?
0
 
LVL 96

Accepted Solution

by:
Bob Learned earned 500 total points
ID: 24153925
I would think that you could define a string list for the source folder names, and then put this code in For loop:

Dim srcFolderList As New List(Of String)

srcFolderList.Add("C:\MyFolder1")
srcFolderList.Add("C:\MyFolder2")
      Dim objShell As New Shell32.ShellClass

      Dim objFolderSrc As Shell32.Folder

      Dim objFolderDst As Shell32.Folder

      Dim objFolderItems As Shell32.FolderItems

 

      For Each srcFolderString in srcFolderList

        objFolderSrc = objShell.NameSpace(srcfolderString)

        objFolderDst = objShell.NameSpace(dstfolderString)

        objFolderItems = objFolderSrc.Items

        objFolderDst.CopyHere(objFolderItems, 20)

      Next srcFolderString

Open in new window

0
 

Author Comment

by:Syncer
ID: 24153967
Using the above method, I now get an unhandled NullReferenceException at objFolderItems = objFolderSrc.Items - "Object reference not set to an instance of an object."
Private Sub ButtonGatherLogs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonGatherLogs.Click

        Dim srcFolderList As New List(Of String)

        Dim srcfolderString As String

        Dim dstfolderString As String = (My.Computer.FileSystem.SpecialDirectories.Desktop + "\Logs.zip")

        Dim objShell As New Shell32.ShellClass

        Dim objFolderSrc As Shell32.Folder

        Dim objFolderDst As Shell32.Folder

        Dim objFolderItems As Shell32.FolderItems
 

        'get folder to zip

        If CheckBoxFolderOne.CheckState = CheckState.Checked Then

            'Add FolderOneto ZIP

            srcFolderList.Add(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData + "\FolderOne")

        End If

        If CheckBoxFolderTwo.CheckState = CheckState.Checked Then

            'Add FolderTwo Directory to ZIP

            srcFolderList.Add(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData + "\FolderTwo")

        End If

        If CheckBoxFileOne.CheckState = CheckState.Checked Then

            'Add FileOne to ZIP

            srcFolderList.Add(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData + "\FileOne.log")

        End If
 

        If CheckBoxSyncFolderOne.CheckState Or CheckBoxFolderTwo.CheckState Or CheckBoxFileOne.CheckState = CheckState.Checked Then

            'create empty zip file

            Dim fileContents() As Byte = {80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

            My.Computer.FileSystem.WriteAllBytes(dstfolderString, fileContents, False)
 

            For Each srcfolderString In srcFolderList

                objFolderSrc = objShell.NameSpace(srcfolderString)

                objFolderDst = objShell.NameSpace(dstfolderString)

                objFolderItems = objFolderSrc.Items

                objFolderDst.CopyHere(objFolderItems, 20)

            Next srcfolderString

        End If

    End Sub

Open in new window

0
 

Author Comment

by:Syncer
ID: 24154150
It turns out it was just my fault:
   My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData
Needed to be renamed to:
   Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

Thanks for the TheLearnedOne!
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Article by: jpaulino
XML Literals are a great way to handle XML files and the community doesn’t use it as much as it should.  An XML Literal is like a String (http://msdn.microsoft.com/en-us/library/system.string.aspx) Literal, only instead of starting and ending with w…
Introduction When many people think of the WebBrowser (http://msdn.microsoft.com/en-us/library/2te2y1x6%28v=VS.85%29.aspx) control, they immediately think of a control which allows the viewing and navigation of web pages. While this is true, it's a…
Illustrator's Shape Builder tool will let you combine shapes visually and interactively. This video shows the Mac version, but the tool works the same way in Windows. To follow along with this video, you can draw your own shapes or download the file…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now