Dzisiaj pokażę jak zrobić program który będzie pakował zipem plik i umieszczał go w wybranym katalogu, a gdy plik będzie istniał to będzie go aktualizował. Zaczynamy od utworzenia nowego projektu i umieszczeniu określonych elementów na wybranych miejscach:
| Rodzaj elementu | Nazwa elementu | Ustawienia |
|---|---|---|
| Form | Form1 | Size: 561; 226 Text: Pakowanie z użyciem Packing |
| Label | Label1 | Text: Plik do pakowania: Location: 12; 27 |
| TextBox | plik | Size: 306; 20 Location: 133; 20 |
| Button | Button1 | Size: 75;23 Location: 445; 16 |
| Label | Label2 | Location: 12;75 Text: Miejsce umieszczenia spakowanego pliku: |
| TextBox | miejsce_docelowe | Size: 217; 20 Location: 222; 68 |
| Button | Button2 | Size: 75; 23 Location: 445; 65 |
| Button | pakuj | Location: 204; 108 Enabled: false Size: 103; 55 |
| FolderBrowserDialog | DodajMiejsceDocelowe | Name: DodajMiejsceDocelowe |
| OpenFileDialog | DodajPlik | Name: DodajPlik |
Po ułożeniu elementów forma powinna wyglądać tak:
Musimy pamiętać też o dodaniu tych ważnych dwóch elementów:
Znaleźć je można w przyborniku w zakładce „Okna Dialogowe”. Tworzymy sobie uchwyty dla naszych przycisków dodających plik do spakowania i folder docelowy (klikając dwukrotnie lewym przyciskiem myszy na przycisk) i wypełniamy nasz kod tak jak to jest pokazane poniżej. Przyciski odpowiadają, za dialog z użytkownikiem a jego wybory zapisują w zmiennych „file” i „miejsceDocelowe”.
Public Class Form1
Dim file As String
Dim miejsceDocelowe As String
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
DodajPlik.Title = "Wybierz plik który chcesz spakować."
DodajPlik.FileName = ""
Try
With DodajPlik
If .ShowDialog() = DialogResult.OK Then
file = .FileName
plik.Text = .FileName
End If
End With
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Try
With DodajMiejsceDocelowe
If DodajMiejsceDocelowe.ShowDialog() = DialogResult.OK Then
miejsce_docelowe.Text = .SelectedPath
miejsceDocelowe = .SelectedPath
End If
End With
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class
Teraz dodamy sobie komendę która odblokuje nam nasz przycisk „Pakuj” W chwili wypełnienia powyższych pól. Klikamy dwukrotnie lewym przyciskiem myszy najpierw pierwszy textbox a następnie drugi aby utworzyć zaczepienie w naszym kodzie.
Private Sub miejsce_docelowe_TextChanged(sender As Object, e As EventArgs) Handles miejsce_docelowe.TextChanged
If Not plik.Text = "" And Not miejsce_docelowe.Text = "" Then
pakuj.Enabled = True
End If
End Sub
Private Sub plik_TextChanged(sender As Object, e As EventArgs) Handles plik.TextChanged
If Not plik.Text = "" And Not miejsce_docelowe.Text = "" Then
pakuj.Enabled = True
End If
End Sub
Po uruchomieniu efekt powinien być jak na obrazku:
Nad formą dodajemy sobie import naszej paczki:
Imports System.IO.Packaging Imports System.IO Public Class Form1 (...)
Jeśli po wpisaniu System.IO.Packing świeci się na zielono trzeba go dodać do Odwołań, w tym celu otwieramy „My Project”, znajdujemy po lewej stronie „Odwołania” i klikamy „Dodaj”
Znajdujemy „WindowsBase” i stawiamy przy nim fajkę. Teraz możemy bez przeszkód używać paczki.
Teraz tworzymy uchwyt do naszego przycisku „Pakuj” i wypełniamy go kodem:
Private Sub pakuj_Click(sender As Object, e As EventArgs) Handles pakuj.Click
Dim data As String
data = Format(Date.Now(), "dd-MM-yyyy") ''Nazwą naszego spakowanego pliku będzie aktualna data
Dim pliczek As String = file
Dim Z As System.IO.Packaging.ZipPackage
Dim zipPath As String = miejsceDocelowe + "\" + data + ".zip" 'miejsce w którym pokaże się nasz plik
' Tworzymy plik "zip"
Z = ZipPackage.Open(zipPath, IO.FileMode.OpenOrCreate, IO.FileAccess.ReadWrite)
Dim partUriDocument As Uri = System.IO.Packaging.PackUriHelper.CreatePartUri(New Uri(System.IO.Path.GetFileName(file), UriKind.Relative))
If Z.PartExists(partUriDocument) Then
Z.DeletePart(partUriDocument)
End If
'tworzy nowy plik
Dim P = Z.CreatePart(partUriDocument, System.Net.Mime.MediaTypeNames.Application.Zip, IO.Packaging.CompressionOption.Maximum)
Dim dest As Stream = P.GetStream()
Using fileStream As New FileStream(file, FileMode.Open, FileAccess.Read)
fileStream.CopyTo(dest)
End Using
Z.Close()
End Sub
Wygląda to tak jak na obrazku poniżej:
Pełen projekt do pobrania tutaj: Pakowanie_urzywajac_Packaging






