次の方法で共有


バックアップ アプリケーションの作成

テープ上で入力または出力を実行するには、バックアップ アプリケーションはまずテープ デバイスのハンドルを取得する必要があります。 次のコード サンプルは、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 を持つストリームを書き込むことができます。

テープからディスクにファイルを復元する場合、アプリケーションは CreateFileBackupWrite、および ReadFile 関数を使用する必要があります。 テープ上の各ファイルについて、アプリケーションは CreateFile を使用してディスク上に新しいファイルを作成し、BackupWrite を使用してファイルの復元を開始する必要があります。 その後、ファイルのすべての情報が BackupWrite によって格納されたバッファーにテープから読み取られるまで、アプリケーションは ReadFile を繰り返し使用する必要があります。

BackupWrite バッファー内のいずれかのストリームに BACKUP_LINK ストリーム識別子がある場合、アプリケーションはハード リンクを確立する必要があります。 リンクを確立するために必要なデータが存在しない場合、BackupWrite は失敗します。 アプリケーションは、既存のカタログを使用して元のデータを見つけて復元したり、復元するファイル データが別の場所にあることをユーザーに通知したりできます。