// Tworzy pod wskazaną ścieżką nowy plik archiwum i pozostawia go otwartym public static FileArchive Create(string filepath, string password, bool compression) { if (File.Exists(filepath)) { throw new Exception("Plik pod wskazaną ścieżką już istnieje"); } EncryptionKey key = EncryptionKey.Generate(password); FileArchive archive = new FileArchive(); archive.FilePath = filepath; archive.ArchiveKey = key; archive.IsCompressed = compression; archive.CreateArchiveFile(); return(archive); }
// Tworzy głęboką kopię wystąpienia (niezbędne dla przechowania backupu) public FileArchive Clone() { FileArchive copy = new FileArchive(); copy.FilePath = FilePath; copy.ArchiveKey = ArchiveKey.Clone(); copy.IsCompressed = IsCompressed; Hashtable idFileNamePairs = new Hashtable(); foreach (int id in IdFileNamePairs.Keys) { idFileNamePairs.Add(id, IdFileNamePairs[id]); } copy.IdFileNamePairs = idFileNamePairs; copy.Connection = (SQLiteConnection)Connection.Clone(); return(copy); }
/* * Metody publiczne zwracające obiekt klasy wg. wzorca factory */ // Otwiera istniejący pod wskazaną ścieżką plik archiwum public static FileArchive Open(string filepath, string password) { if (!File.Exists(filepath)) { throw new Exception("Plik pod wskazaną ścieżką nie istnieje!"); } FileArchive archive = new FileArchive(); archive.FilePath = filepath; // Wyciągnięcie z archiwum informacji o kluczu i kompresji archive.SelectArchiveInfo(); // Wyprowadzenie klucza na podstawie podanego hasła archive.DeriveKey(password); // Wyciągnięcie z archiwum listy nazw plików w formie jawnej archive.SelectPlaintextFileNames(); return(archive); }