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”.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
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.
1 2 3 4 5 6 7 8 9 10 11 |
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:
1 2 3 4 5 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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