Program do tworzenia kopii zapasowej

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:

kopia_bezpieczenstwa1

aby dodać referencje klikamy prawym przyciskiem myszy na nasz projekt i wybieramy:

w VS2013  Dodaj>>Reference…

kopia_bezpieczenstwa2

 

W VS2012 Dodaj Odwołanie….

kopia_bezpieczenstwa2,5

Teraz wybieramy „Przeglądaj” i znajdujemy miejsce gdzie umieszczony jest nasz plik „Ionic.zip”

kopia_bezpieczenstwa4

 

kopia_bezpieczenstwa5

kopia_bezpieczenstwa3

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

kopia_bezpieczenstwa6

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:

kopia_bezpieczenstwa7

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

Permalink do tego artykułu: https://visualmonsters.cba.pl/program-do-tworzenia-kopii-zapasowej/

Dodaj komentarz

Twój adres email nie będzie publikowany.