Criando um aplicativo de backup

Para executar a entrada ou saída em uma fita, um aplicativo de backup deve primeiro obter um identificador do dispositivo de fita. O exemplo de código a seguir mostra como usar a função CreateFile para abrir um dispositivo de fita.

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

Para fazer backup de uma árvore de diretórios em uma fita, um aplicativo deve usar as funções FindFirstFile e FindNextFile para percorrer a árvore de diretórios. Cada vez que um arquivo é encontrado, o aplicativo deve obter os atributos de arquivo usando a função GetFileAttributes.

Se houver links físicos, um aplicativo deve determinar o número de links e salvar o identificador exclusivo do arquivo em uma tabela para comparações futuras. Na primeira vez que um arquivo é encontrado, o aplicativo deve usar CreateFile para abrir o arquivo e a função BackupRead para iniciar o backup. Em seguida, ele pode usar a função WriteFile repetidamente para transferir todas as informações no buffer usado pelo BackupRead para a fita. Na segunda vez que um arquivo é encontrado (verificado em relação à tabela de identificadores de arquivo quando há links físicos), o aplicativo pode gravar as informações gerais do arquivo na fita, seguido por um fluxo que tem um identificador que é BACKUP_LINK.

Ao restaurar arquivos de fita para disco, um aplicativo deve usar as funções CreateFile, BackupWrite e ReadFile. Para cada arquivo em uma fita, o aplicativo deve usar CreateFile para criar um novo arquivo no disco e BackupWrite para começar a restaurar o arquivo. Em seguida, o aplicativo deve usar ReadFile repetidamente até que todas as informações do arquivo sejam lidas da fita para o buffer preenchido por BackupWrite.

Se um dos fluxos no buffer BackupWrite tiver um identificador de fluxo BACKUP_LINK, o aplicativo deverá estabelecer um link físico. Se os dados necessários para estabelecer o link não existirem, o BackupWrite falhará. O aplicativo pode usar um catálogo pré-existente para localizar e restaurar os dados originais ou pode notificar o usuário de que os dados do arquivo a serem restaurados estão em um local diferente.