创建备份应用程序

若要对磁带执行输入或输出,备份应用程序必须首先获取磁带设备的句柄。 下面的代码示例演示如何使用 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 将失败。 应用程序可以使用预先存在的目录来查找和还原原始数据,也可以通知用户要还原的文件数据位于其他位置。