磁带输入和输出
应用程序可以使用多个函数在磁带驱动器上执行输入和输出 (I/O)。 磁带 I/O 类似于在通信设备上执行的 I/O。
执行磁带 I/O 时,某些磁带驱动器将磁带固件信息存储在磁带上的前几个块中,通常使用前 100 个块的一些部分。 应用程序不应使用这些块。 各个磁带系统制造商提供了有关此主题的更具体信息。 一般情况下,跳过磁带上的前 100 个块的应用程序将避免磁带驱动器专用。
GetTapePosition 和 SetTapePosition 函数检索并移动当前磁带位置。 WriteTapemark 函数写入指定数量的集标记、文件标记、短文件标记和长文件标记。 EraseTape 函数会擦除磁带的所有或部分。
ReadFile 和 WriteFile 函数从磁带读取和写入文件数据。 数据以完整块读取和写入。 如果磁带的块大小为 512 字节,则所有读取和写入操作都必须使用该块大小的简单整数倍数的缓冲区:512、1024、1536、2048 等。 大多数驱动器(如果不是全部)仅允许在磁带重排或读取操作后执行写入操作,从而生成数据结束错误消息。
若要以可变长度块模式读取或从磁带读取或写入文件数据,请执行以下步骤:
- 通过调用 GetTapeParameters 函数并检查返回TAPE_GET_DRIVE_PARAMETERS 结构的 FeaturesLow 成员,确定磁带驱动器是否支持可变长度块模式。
- 通过调用 SetTapeParameters 函数指定可变块大小模式,将 TAPE_SET_MEDIA_PARAMETERS 结构的 BlockSize 成员设置为零。 然后,使用 ReadFile 或 WriteFile 读取或写入文件数据。
如果 ReadFile 遇到文件标记,则读取文件标记之前的数据,函数将失败。 (GetLastError 函数返回一个错误代码,指示遇到的文件标记的类型。)操作系统将磁带移过文件标记,应用程序可以再次调用 ReadFile 以继续读取。
ReadFile 和 WriteFile 仅读取和写入数据流。 BackupRead 和 BackupWrite 函数读取和写入与文件关联的所有流。 其中包括数据、扩展属性、安全性和备用数据流。 安全和备用数据流仅与 NTFS 文件系统分区相关。
BackupSeek 函数查找最初由 BackupRead 或 BackupWrite 访问的文件。 此函数使应用程序能够跳过导致访问错误的信息。
如果应用程序仅需要访问文件数据,则应使用 ReadFile 和 WriteFile。 如果使用 CreateFile 函数创建流,这些函数还可以读取备用数据流。
磁带备份应用程序必须使用 BackupRead 和 BackupWrite 复制与文件相关的所有信息。 但是,这些函数不会读取或写入文件特征,例如属性、文件创建时间等。 应用程序必须使用文件输入和输出函数(如 GetFileAttributes 和 SetFileAttributes)来检索和设置这些值。