Nasz program będzie dosyć uproszczony, nie będę pisał jak zrobić Notifyicon albo jak zrobić aby program odpalał się przy starcie Windowsa bo już o tym pisałem na forum, można do programu zrobić automatykę np: kopia robiona jest w określony dzień tygodnia, miesiąca o określonej godzinie. Wszystko to można znaleźć na blogu dlatego zrobimy sobie tutaj tylko program który będzie robił kopie. Podstawowym zasobem będzie biblioteka której będziemy potrzebować. Można ją ściągnąć tutaj: Ionic.Zip więcej o bibliotece można się dowiedzieć pod adresem : http://dotnetzip.codeplex.com biblioteka jest open sourcowa ale warto przeczytać licencję. Więcej o możliwościach biblioteki można znaleźć w dziale przykładów dotnetzip’a http://dotnetzip.codeplex.com/Examples Wersja dostępna na tym wpisie to wersja 1.8 ponieważ z tą 1.9 miałem kilka problemów. Dobra zaczniemy od dodania Referencji. Tworzymy nowy projekt, rozkładamy jego elementy zgodnie z tabelą poniżej:
| Rodzaj elementu | Nazwa elementu | Ustawienia |
|---|---|---|
| Form | Form1 | Size: 763; 342 Text: Tworzenie kopii zapasowej |
| TextBox | Scieszka_folderu_docelowego | Size: 515; 20 Location: 212; 273 Name: Scieszka_folderu_docelowego ReadOnly: True |
| Button | Dodaj_Folder | Size: 193; 23 Location: 13; 13 Text: Dodaj folder Name: Dodaj_Folder |
| Button | Dodaj_plik | Size: 193; 23 Location: 13; 42 Text: Dodaj plik Name: Dodaj_plik |
| Button | Wykonaj_kopie | Location: 13; 167 Enabled: false Size: 193; 23 Text: Wykonaj kopie Name: Wykonaj_kopie |
| Button | Dodaj_folder_docelowy | Name: Dodaj_folder_docelowy Size: 193; 23 Location: 12; 238 Text: Folder docelowy |
| Button | Usun | Name: Usun Location: 12; 267 Size: 193; 23 Text: Usuń z listy |
| TextBox | haslo | Name: haslo Location: 13; 118 Size: 192; 20 |
| ListView | Lista_plikow | Location: 212; 12 Size: 515; 249 Widok: Details Dodano jedną kolumnę: -Name: ColumnHeader1 -Text: Pliki i foldery -Width: 489 |
Powinno to wyglądać tak jak na zdjęciu:
aby dodać referencje klikamy prawym przyciskiem myszy na nasz projekt i wybieramy:
w VS2013 Dodaj>>Reference…
W VS2012 Dodaj Odwołanie….
Teraz wybieramy „Przeglądaj” i znajdujemy miejsce gdzie umieszczony jest nasz plik „Ionic.zip”
Otwieramy teraz kod naszego programu i importujemy bibliotekę:
Imports Ionic.Zip Public Class Form1 (...)
Teraz możemy korzystać z naszego zasobu. Najpierw dodamy aktywność przycisków „Dodaj folder” i „Dodaj plik” Tworzymy do nich uchwyt (klikając na każdy przycisk dwukrotnie). Najpierw musimy zainicjować dwie ogólnie dostępne listy:
Public Class Form1
Dim pliki As New List(Of String)
Dim folderDocelowySciezka As String
(...)
W jednej będziemy trzymać ścieżki do naszych plików a w drugim ścieżkę do pliku docelowego kopii (miejsce trzymania spakowanych plików). Teraz odpowiednio dla przycisku dodającego plik kod wygląda tak:
Private Sub Dodaj_plik_Click(sender As Object, e As EventArgs) Handles Dodaj_plik.Click
DodajPlik.Title = "Dodaj plik do listy kopii bezpieczeństwa"
DodajPlik.FileName = ""
Try
With DodajPlik
If .ShowDialog() = DialogResult.OK Then
Lista_plikow.Items.Add(.FileName)
pliki.Add(.FileName)
End If
End With
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Pętla jeśli plik będzie wybrany doda jego ścieżkę do listy plików i do ListView. Kod do dodawania folderów wygląda tak:
Private Sub Dodaj_Folder_Click(sender As Object, e As EventArgs) Handles Dodaj_Folder.Click
Try
With DodajFolder
If DodajFolder.ShowDialog() = DialogResult.OK Then
Lista_plikow.Items.Add(.SelectedPath)
pliki.Add(.SelectedPath)
End If
End With
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Działa on identycznie jak poprzedni. Obie metody działają używając Dialogów dodanych do formy
Teraz dodamy kod do przycisku wybierającego folder docelowy naszej kopii:
Private Sub Dodaj_folder_docelowy_Click(sender As Object, e As EventArgs) Handles Dodaj_folder_docelowy.Click
Try
With FolderDocelowy
If FolderDocelowy.ShowDialog() = DialogResult.OK Then
Scieszka_folderu_docelowego.Text = FolderDocelowy.SelectedPath
folderDocelowySciezka = FolderDocelowy.SelectedPath
Wykonaj_kopie.Enabled = True
End If
End With
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Ścieżka pliku docelowego będzie widoczna w textboxie pod listą plików.
Zajmiemy się teraz kodem usuwającym pliki z listy wygląda on tak:
Private Sub Usun_Click(sender As Object, e As EventArgs) Handles Usun.Click
For Each i As ListViewItem In Lista_plikow.SelectedItems
Lista_plikow.Items.Remove(i)
Next
pliki.Clear()
For Each elements In Lista_plikow.Items
pliki.Add(elements.text)
Next
End Sub
Kod ten najpierw usunie z listy ścieżkę do pliku następnie wyczyści nam naszą listę plików i załaduje ją ponownie na podstawie tego co znajdzie w listview.
Teraz stworzymy kod który będzie nam pakował te wszystkie pliki, wygląda on tak:
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Wykonaj_kopie.Click
Dim data As String
data = Format(Date.Now(), "dd-MM-yyyy") '' Pobieraz z systemu aktualną datę
Dim zipPath As String = folderDocelowySciezka + "\" + data + ".zip" 'ścieżka do naszego noewgo pliku *.zip
If pliki.Count > 0 Then 'jeśli w liście istnieją jakieś pliki pętla będzie wykonywana
Using zip1 As New ZipFile 'tworzy plik zip
If Not haslo.Text = "" Then 'jeśli textbox z hasłem nie jest pusty, pętla ustawi dla naszego pliku zip hasło
zip1.Password = haslo.Text
End If
For Each file In pliki
If System.IO.File.Exists(file) Then
zip1.UpdateFile(file, "pliki") 'dodaje do naszego pliku zip1 nasze pliki i umieszcza je wewnątrz folderu "pliki"
ElseIf System.IO.Directory.Exists(file) Then
Dim parts As String() = file.Split(New Char() {"\"c})
zip1.UpdateDirectory(file, parts(parts.Count - 1)) 'dodaje do pliku zip wybrane foldery
End If
Next
zip1.Save(zipPath) 'zapisuje nasz plik zip używając ścieżki zipPath
End Using
Else
MsgBox("Nie dodałeś żadnych plików do listy")
End If
End Sub
Teraz można wypróbować nasz program. Efekt przedstawiam na filmie i na zdjęciu:
Nasz plik zip można zabezpieczyć hasłem i tylko osoba znająca hasło będzie mogła go otworzyć. Jak to wygląda można zobaczyć na filmie:
Pełen projekt do pobrania można dostać tutaj: kopia_zapasowa









