テープで入力または出力を実行するには、バックアップ アプリケーションが最初にテープ デバイスのハンドルを取得する必要があります。 次のコード サンプルは、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 で使用されるバッファー内のすべての情報 テープに転送できます。 2 回目にファイルが見つかると (ハード リンクがある場合はファイル識別子のテーブルに対してチェックされます)、アプリケーションは一般的なファイル情報をテープに書き込み、その後に BACKUP_LINK識別子を持つストリームを書き込むことができます。
テープからディスクにファイルを復元する場合、アプリケーションでは、CreateFile、BackupWrite、ReadFile関数使用する必要があります。 テープ上の各ファイルについて、アプリケーションは CreateFile を使用してディスクに新しいファイルを作成し、BackupWrite を してファイルの復元を開始する必要があります。 次に、すべてのファイル情報がテープから BackupWriteによってバッファーに読み込まれるまで、アプリケーションは ReadFile を繰り返し利用する必要があります。
BackupWrite バッファー内のいずれかのストリームに BACKUP_LINK ストリーム識別子がある場合、アプリケーションはハード リンクを確立する必要があります。 リンクを確立するために必要なデータが存在しない場合、BackupWrite 失敗します。 アプリケーションは、既存のカタログを使用して元のデータを見つけて復元したり、復元するファイル データが別の場所にあることをユーザーに通知したりできます。