创建备份应用程序

若要对磁带执行输入或输出,备份应用程序必须首先获取磁带设备的句柄。 以下代码示例显示如何使用 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

若要将目录树备份到磁带,应用程序必须使用 FindFirstFileFindNextFile 函数遍历目录树。 每次找到文件时,应用程序都会使用 GetFileAttributes 函数获取文件属性。

如果存在硬链接,应用程序会确定链接的数量,并将文件的唯一标识符保存在表中以备将来比较。 第一次找到文件时,应用程序会使用 CreateFile 打开该文件,并使用 BackupRead 函数开始备份。 然后,它重复使用 WriteFile 函数,将 BackupRead 使用的缓冲区中的所有信息传输到磁带。 第二次找到文件时(当存在硬链接时,根据文件标识符表进行检查),应用程序将一般文件信息写入磁带,然后写入标识符为 BACKUP_LINK 的流。

将文件从磁带还原到磁盘时,应用程序必须使用 CreateFileBackupWriteReadFile 函数。 对于磁带上的每个文件,应用程序使用 CreateFile 在磁盘上创建新文件,并使用 BackupWrite 开始还原文件。 然后,应用程序重复使用 ReadFile,直到将文件的所有信息从磁带读取到由 BackupWrite 填充的缓冲区中。

如果 BackupWrite 缓冲区中的一个流具有 BACKUP_LINK 流标识符,则应用程序必须建立硬链接。 如果建立链接所需的数据不存在,BackupWrite 将失败。 应用程序可以使用预先存在的目录来查找和还原原始数据,也可以通知用户要还原的文件数据位于其他位置。