Создание приложения резервного копирования
Чтобы выполнить входные или выходные данные на ленте, приложение резервного копирования должно сначала получить дескриптор ленточного устройства. В следующем примере кода показано, как использовать функцию 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
Чтобы создать резервную копию дерева каталогов на ленту, приложение должно использовать функции FindFirstFile и FindNextFile для обхода дерева каталогов. Каждый раз при обнаружении файла приложение должно получать атрибуты файла с помощью функции GetFileAttributes.
Если есть жесткие ссылки, приложение должно определить количество ссылок и сохранить уникальный идентификатор файла в таблице для будущих сравнений. При первом обнаружении файла приложение должно использовать CreateFile для открытия файла и функции BackupRead, чтобы начать резервное копирование. Затем она может многократно использовать функцию WriteFile для передачи всех сведений в буфере, используемого BackupRead на ленту. Во второй раз, когда файл найден (проверка в таблице идентификаторов файлов при наличии жестких ссылок), приложение может записывать общие сведения о файле на ленту, а затем поток с идентификатором, который BACKUP_LINK.
При восстановлении файлов с ленты на диск приложение должно использовать функции CreateFile, BackupWrite и ReadFile. Для каждого файла на ленте приложение должно использовать CreateFile для создания нового файла на диске и BackupWrite , чтобы начать восстановление файла. Затем приложение должно многократно использовать ReadFile , пока все сведения для файла не считываются из ленты в буфер, заполненный BackupWrite.
Если один из потоков в буфере BackupWrite содержит идентификатор потока BACKUP_LINK , приложение должно установить жесткую связь. Если данные, необходимые для установления ссылки, не существуют, backupWrite завершается ошибкой. Приложение может использовать предварительно существующий каталог для поиска и восстановления исходных данных или уведомить пользователя о том, что восстановленные данные файла находятся в другом расположении.