磁帶輸入和輸出
有數個函式可供應用程式用來在磁帶機上執行輸入和輸出 (I/O)。 磁帶 I/O 類似於在通訊裝置上執行的 I/O。
執行磁帶 I/O 時,某些磁帶機會將磁帶韌體資訊儲存在磁帶的前幾個區塊中,通常是使用前 100 個區塊的一部分。 應用程式不應該使用這些區塊。 有關此主題的更具體資訊可從個別磁帶系統製造商取得。 一般而言,略過磁帶上前 100 個區塊的應用程式,將避免磁帶機異常。
GetTapePosition 和 SetTapePosition 函式會擷取並移動目前的磁帶位置。 WriteTapemark 函式會寫入指定數目的 setmark、filemark、short filemarks 和 long filemarks。 EraseTape 函式會清除磁帶的所有或部分。
ReadFile 和 WriteFile 函式會讀取和寫入磁帶的檔案數據。 數據會以完整區塊讀取和寫入。 如果磁帶的區塊大小為 512 個字節,則所有讀取和寫入作業都必須使用該區塊大小的簡單整數倍數的緩衝區:512、1024、1536、2048 等等。 大部分的磁碟驅動器若不是全部,則只會在磁帶重排或讀取作業之後允許寫入作業產生數據結束錯誤訊息。
若要以可變長度區塊模式讀取或寫入磁帶的檔案數據,請執行下列步驟:
- 藉由呼叫 GetTapeParameters 函式並檢查傳回TAPE_GET_DRIVE_PARAMETERS 結構之 FeaturesLow 成員的 TAPE_DRIVE_VARIABLE_BLOCK 位,判斷磁帶機是否支援可變長度區塊模式。
- 呼叫 SetTapeParameters 函式,將TAPE_SET_MEDIA_PARAMETERS結構的 BlockSize 成員設定為零,以指定變數區塊大小模式。 然後,使用 ReadFile 或 WriteFile 來讀取或寫入檔案數據。
如果 ReadFile 遇到檔案標記,則會讀取檔案標記的數據,且函式會失敗。 (The GetLastError 函式會傳回錯誤碼,指出所遇到的檔案標記類型。操作系統會將磁帶移過檔標記,而應用程式可以再次呼叫 ReadFile 以繼續讀取。
ReadFile 和 WriteFile 只會讀取和寫入數據流。 BackupRead 和 BackupWrite 函式會讀取和寫入與檔案相關聯的所有數據流。 其中包括數據、擴充屬性、安全性和替代數據流。 安全性和替代數據流僅與NTFS檔系統分割區相關。
BackupSeek 函式會在BackupRead或BackupWrite最初存取的檔案中向前搜尋。 此函式可讓應用程式略過造成存取錯誤的資訊。
如果應用程式只需要存取檔案數據,它應該使用 ReadFile 和 WriteFile。 如果數據流是使用 CreateFile 函式建立的,這些函式也可以讀取替代數據流。
磁帶備份應用程式必須使用BackupRead和BackupWrite來複製與檔案相關的所有資訊。 不過,這些函式不會讀取或寫入檔案特性,例如屬性、檔案建立時間等等。 應用程式必須使用檔案輸入和輸出函式,例如 GetFileAttributes 和 SetFileAttributes 來擷取和設定這些值。