Создайте утилиту резервного копирования в C # - PullRequest
2 голосов
/ 25 августа 2010

Я думаю о Backup Utility как о своей следующей идее проекта, но я не знаю, с чего начать и как создавать резервные копии.

Может кто-нибудь пролить свет на то, какие методыархивирование резервных копий, восстановление и т. д. сделано.

Спасибо

Ответы [ 5 ]

4 голосов
/ 25 августа 2010

Начнем с того, что я не верю, что видел какие-либо пространства имен или классы в .NET Framework, специально предназначенные для операций резервного копирования / архивирования / восстановления.Если кто-нибудь знает что-либо, ну, пожалуйста, сообщите нам, пожалуйста!

Самое простое, резервное копирование файлов - это просто копирование файлов из одного места в другое.Допустим, у вас есть исходный код, для которого вы хотите сохранить резервную копию, и он меняется день ото дня.Вы можете создать небольшое консольное приложение, которое будет просто копировать все файлы в целевых папках на внешний диск, перезаписывать любые файлы, которые изменились с момента последней операции копирования, и добавлять любые новые файлы и папки в место назначения.Затем используйте запланированное задание, чтобы запускать утилиту один раз в день, когда компьютер не используется иным образом - или, по крайней мере, когда источник не редактируется.

Существует множество методов и классов впространство имен System.IO, которое сделает это относительно простым.

Некоторые полезные классы в пространстве имен IO:

  • Каталог предоставляет статические методы для создания, перемещения и перечисления через каталогии подкаталоги
  • DirectoryInfo - это класс, представляющий свойства папок / каталогов
  • Файл предоставляет статические методы для файлов
  • FileInfo - это класс, представляющий свойства файлов.

Вот пример кода, который даст вам массив всех папок верхнего уровня прямо под корнем диска C:

string[] d = Directory.GetDirectories(@"C\", "*.*", SearchOption.TopDirectoryOnly);
DirectoryInfo[] di = new DirectoryInfo[d.Length];
for (int x = 0; x < d.Length; x++)
{
    di[x] = new DirectoryInfo(d[x]);
}
2 голосов
/ 11 июля 2011

AlphaVSS предоставляет полный API-интерфейс VSS (службы теневого копирования томов) для кода .NET. Это может позволить вам создать моментальный снимок времени с использованием управляемого кода.

2 голосов
/ 25 августа 2010

Один из более простых методов будет:

  1. Разрешить пользователю выбирать целевую папку и место назначения, а также тип назначения (Zip, копия и т. Д.)
  2. Копировать / сжать файлы и подпапки в целевой папке до места назначения

Если вы просто хотите скопировать файлы, то вы можете использовать DirectoryInfo и FilesInfo для получения каталога, файлов и выполнения FileCopy, FileMove и т. Д. ...

Если вы хотите сжать файлы в месте назначения, то вы можете использовать существующую библиотеку, например 7z, которая также имеет коды для C #.

1 голос
/ 25 августа 2010

Прочтите эту статью в Википедии - Резервное копирование и убедитесь, что вы все понимаете в ней.

Простейшей утилитой резервного копирования будет позволить пользователю выбрать исходную папку и папку назначения и просто скопировать ее. (поскольку это все резервное копирование по существу).

Но вам потребуются некоторые рекурсивные обращения к папкам для резервного копирования каждой папки внутри папок.

1 голос
/ 25 августа 2010
  • Планируете ли вы выполнять резервное копирование по секторам или по файлам?
  • Будет ли резервная копия работать от имени администратора (доступ ко всем файлам) или от имени пользователя (доступтолько для некоторых файлов)?
  • Как защитить информацию уровня администратора, которая теперь хранится в файле резервной копии, от средств просмотра уровня пользователя?
  • Должна ли целевая среда иметь выделенное пространство для резервной копии (большаясетевой диск) или резервная копия сможет охватить несколько носителей?(CDROM)
  • В последнем случае, как вы будете обращаться с отдельными файлами, размер которых превышает один целевой носитель?
  • Всегда ли вы будете делать полное резервное копирование (все, всегда) или инкрементное (только что изменилось с момента последнего резервного копирования) или дифференциал (только что изменилось с момента последнего полного резервного копирования)?
...