Udostępnij przez


Tworzenie aplikacji kopii zapasowej

Aby wykonać dane wejściowe lub wyjściowe na taśmie, aplikacja kopii zapasowej musi najpierw uzyskać uchwyt urządzenia taśmowego. Poniższy przykładowy kod przedstawia sposób otwierania urządzenia taśmowego za pomocą funkcji CreateFile.

HANDLE hTape;   // handle to tape device
 
hTape = CreateFile(TEXT("\\\\.\\TAPE0"),         // tape dev to open
                   GENERIC_READ | GENERIC_WRITE, // read/write access
                   0,                            // not used
                   0,                            // not used
                   OPEN_EXISTING,                // req for tape devs
                   0,                            // not used
                   NULL);                        // not used

Aby utworzyć kopię zapasową drzewa katalogów na taśmie, aplikacja musi użyć FindFirstFile i funkcji FindNextFile, aby przejść przez drzewo katalogów. Za każdym razem, gdy plik zostanie znaleziony, aplikacja powinna pobrać atrybuty pliku przy użyciu funkcji GetFileAttributes.

Jeśli istnieją twarde linki, aplikacja powinna określić liczbę łączy i zapisać unikatowy identyfikator pliku w tabeli na potrzeby przyszłych porównań. Przy pierwszym znalezieniu pliku aplikacja powinna użyć CreateFile, aby otworzyć plik, a funkcja BackupRead, aby rozpocząć tworzenie kopii zapasowej. Następnie może wielokrotnie używać funkcji WriteFile, aby przesyłać wszystkie informacje w buforze używanym przez BackupRead na taśmę. Po drugim znalezieniu pliku (sprawdzanego względem tabeli identyfikatorów plików, gdy istnieją twarde linki), aplikacja może zapisać ogólne informacje o pliku na taśmie, a następnie strumień zawierający identyfikator BACKUP_LINK.

Podczas przywracania plików z taśmy na dysk aplikacja musi używać funkcji CreateFile, BackupWritei ReadFile. Dla każdego pliku na taśmie aplikacja powinna użyć CreateFile utworzyć nowy plik na dysku, a BackupWrite rozpocząć przywracanie pliku. Następnie aplikacja powinna używać ReadFile wielokrotnie, dopóki wszystkie informacje dotyczące pliku nie zostaną odczytane z taśmy do buforu wypełnionego przez BackupWrite.

Jeśli jeden ze strumieni w buforze BackupWrite ma identyfikator strumienia BACKUP_LINK, aplikacja musi ustanowić twarde łącze. Jeśli dane potrzebne do ustanowienia łącza nie istnieją, BackupWrite zakończy się niepowodzeniem. Aplikacja może użyć istniejącego wykazu do zlokalizowania i przywrócenia oryginalnych danych lub powiadomić użytkownika, że dane plików do przywrócenia są w innej lokalizacji.