Файл: Инструкция для пользователя Примечание для пользователя.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 22.11.2023
Просмотров: 26
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Инструкция для пользователя
П осле запуска исполняемого файла пользователь увидит графический интерфейс, который выглядит следующим образом.
Перед пользователем появится окошко, в котором ему будет предоставлена возможность выбрать путь до папки, для файлов которых необходимо создать резервную копию. Также папку, в которую будет сохранена резервная копия файлов в архиве. И также период времени в секундах, в который будет выполнять бэкап.
Original Folder – папка, из которой берутся файлы для бэкапа.
Backup Folder – папка, в которую будет помещен бэкап.
Backup Time – время в секундах (период бэкапа)
Кнопки Start, Stop – начало и конец резервного копирования.
Д анная программа ориентирована под пользователей, использующих платформу OC Windows. Установка специального программного обеспечения не требуется. Для запуска программы необходимо:
-
Открыть папку с программой -
Убедиться, что в ней присутствуют все файлы, как на картинке -
Запустить исполняемый файл с названием “main.exe”
Инструкция пользователя
После запуска исполняемого файла main.exe
-
Нажать на кнопку и выбрать путь до необходимой папки для начала резервного копирования -
Нажать на кнопку ниже и выбрать путь до папки, в которую будет сохранена резервная копия. -
Выбрать в поле время в секундах, это означает период резервного копирования.
Для облегчения:
60 – 1 минута
3600 – 1 час
7200 – 2 часа
10800 – 3 часа
86400 – 1 день
604800 – 1 неделя
2592000 – 30 дней
Примечание для пользователя:
-
Выбор двух одинаковых путей(папок) запрещен. -
Необходимо наличие original folder и backup folder -
Взаимодействие с архивами во время резервного копирования запрещается
Пример результата работы
Список используемых ресурсов
https://askdev.ru/q/pochemu-raid-1-schitaetsya-plohim-dlya-rezervnogo-kopirovaniya-zakrytyy-303567/
https://www.in-nov.ru/node/2913
https://www.bibliofond.ru/view.aspx?id=607238#text
https://habr.com/ru/post/162839/
https://www.reg.ru/blog/rasskazyvaem-o-rezervnom-kopirovanii/
https://sbercloud.ru/ru/warp/chto-takoe-rezervnoe-kopirovanie
https://ru.wikipedia.org/wiki/Резервное_копирование
https://www.diagrameditor.com
https://programforyou.ru/block-diagram-redactor
Реализация
/main.py/
import os # работа с операционной системой
import shutil # для архивации
from datetime import datetime
from tkinter import Tk, filedialog, StringVar, messagebox # интерфейс
from GUI import GUI # визуальная часть
app = GUI() # подключение визуальной части
running = False # переменная бэкапа
def backup():
backup_time = 1
if running: # = True - выполнение бэкапа в заданой переодичность
origin_dir = app.VOrigin.get() # Путь папки оригинала
backup_dir = app.VBackup.get() # Путь для бекапа
backup_time = int(app.VBackupTime.get()) # Ввод времени через которое надо делать бекап в секундах
# создание резервной копии с определенным интервалом
shutil.make_archive(backup_dir + "\\" + str(datetime.now().strftime("%d_%m_%Y_%H_%M_%S")), 'zip', origin_dir)
# создание архива с днем и временем (бекап)
app.after(backup_time*1000, backup) # повторной вывод данной процедуры через заданое время в секундах
# провеерка на существование папки оригинала
def __start():
origin_dir = app.VOrigin.get()
backup_dir = app.VBackup.get()
backup_time = app.VBackupTime.get()
if not os.path.exists(origin_dir) or not os.path.isdir(origin_dir):
messagebox.showerror('Error', 'Origin folder not found') # Папка с файлами не была найдена
return
# проверка на существование папки бекапа
if not os.path.exists(backup_dir) or not os.path.isdir(backup_dir):
messagebox.showerror('Error', 'Backup folder not found') # Папка для резервной копии не была найдена
return
# провека на изолированность резервной копии
if origin_dir == backup_dir:
messagebox.showerror('Error',
'Backup should be saved to another directory') # Резервная копия должна быть сохранена в другой директории
return
if not backup_time.isnumeric():
messagebox.showerror('Error', 'Backup time must be numeric') # Проверка на число
return
if float(backup_time) < 1:
messagebox.showerror('Error','Backup time must be more then 1 second') # Минимальное время должно быть больше одной секунды
return
global running
running = True
def __stop(): # Стоп
global running
running = False
def __get_directory(element: StringVar): # Функция вывода пути к директории
folder = filedialog.askdirectory()
if folder != '':
element.set(folder)
app.BOrigin.config(command=lambda: __get_directory(app.VOrigin)) # ввод пути оригинала
app.BBackup.config(command=lambda: __get_directory(app.VBackup)) # ввод пути бекапа
app.BStart.config(command=__start) # старт создания бекапа
app.BStop.config(command=__stop)
backup() # Запуск функции бэкапа
app.mainloop() # Запуск цикла программы
/GUI.py/
import tkinter
from tkinter import *
class GUI(tkinter.Tk):
def __init__(self):
super().__init__()
self.title('Backup Manager')
self.iconbitmap('icon.ico')
self.resizable(0, 0)
self.geometry('500x150')
Label(self, text='Original Folder').place(x=20, y=4, height=20, width=100)
self.VOrigin = StringVar()
self.EOrigin = Entry(self, textvariable=self.VOrigin)
self.EOrigin.place(x=30, y=24, height=20, relwidth=0.748)
self.BOrigin = Button(self, text='...', background="#d9d9d9")
self.BOrigin.place(x=420, y=22, height=24, width=57)
Label(self, text='Backup Folder').place(x=20, y=48, height=20, width=100)
self.VBackup = StringVar()
self.EBackup = Entry(self, textvariable=self.VBackup)
self.EBackup.place(x=30, y=68, height=20, relwidth=0.748)
self.BBackup = Button(self, text='...', background='#d9d9d9')
self.BBackup.place(x=420, y=68, height=24, width=57)
self.BStart = Button(self, text='Start', font="-family {Segoe UI} -size 11", background="#d9d9d9")
self.BStart.place(x=20, y=100, height=34, width=80)
Label(self, text='Backup Time').place(x=120, y=110, height=20, width=100)
self.VBackupTime = StringVar()
self.EBackupTime = Entry(self, textvariable=self.VBackupTime)
self.EBackupTime.place(x=210, y=110, height=20, width=140)
self.BStop = Button(self, text='Stop', font="-family {Segoe UI} -size 11", background="#d9d9d9")
self.BStop.place(x=400, y=100, height=34, width=80)