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ę:
1 2 3 4 |
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:
1 2 3 4 5 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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:
1 2 3 4 5 6 7 8 9 |
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:
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 |
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