reOpenFile 函式 (winbase.h)
重新開啟具有不同存取權限、共用模式和旗標的指定檔案系統物件。
語法
HANDLE ReOpenFile(
[in] HANDLE hOriginalFile,
[in] DWORD dwDesiredAccess,
[in] DWORD dwShareMode,
[in] DWORD dwFlagsAndAttributes
);
參數
[in] hOriginalFile
要重新開啟之物件的控制碼。 物件必須由 CreateFile 函式建立。
[in] dwDesiredAccess
物件的必要存取權。 如需值清單,請參閱 檔案安全性和存取權限。 您無法要求存取模式,該模式與先前開啟要求中指定的共用模式發生衝突,其控制碼仍然開啟。
如果此參數為零 (0) ,則應用程式可以在不存取裝置的情況下查詢裝置屬性。 如果應用程式想要判斷磁片磁碟機的大小,以及它支援的格式,而不需要磁片磁碟機中的磁片磁碟機,這非常有用。
[in] dwShareMode
物件的共用模式。 您無法要求與先前開啟要求中指定的存取模式發生衝突的共用模式,其控制碼仍然開啟。
如果此參數為零 (0) 且 CreateFile 成功,則無法共用物件,而且在關閉控制碼之前無法再次開啟。
若要讓其他進程在開啟物件時共用物件,請使用下列一或多個值的組合來指定開啟物件時可以要求的存取類型。 這些共用選項會維持有效狀態,直到您關閉物件的控制碼為止。
[in] dwFlagsAndAttributes
檔案旗標。 此參數可以是下列一或多個值。
值 | 意義 |
---|---|
|
表示正在開啟或建立備份或還原作業的檔案。 系統可確保呼叫進程會覆寫檔案安全性檢查,前提是其具有 SE_BACKUP_NAME 和 SE_RESTORE_NAME 許可權。 如需詳細資訊,請參閱 變更權杖中的許可權。
您也可以設定此旗標,以取得目錄的控制碼。 如果指出,目錄控制碼可以傳遞至某些函式來取代檔案控制代碼。 |
|
表示作業系統是在關閉所有控制碼之後立即刪除檔案,而不只是指定的控制碼,也是任何其他開啟或重複的控制碼。
除非使用 FILE_SHARE_DELETE ,否則檔案的後續開啟要求會失敗。 |
|
指示系統開啟沒有中繼緩衝或快取的檔案。 與 FILE_FLAG_OVERLAPPED結合時,旗標會提供最大的非同步效能,因為 I/O 不會依賴記憶體管理員的同步作業。 不過,某些 I/O 作業需要較長的時間,因為資料不會保留在快取中。
使用 以 FILE_FLAG_NO_BUFFERING開啟的檔案時,應用程式必須符合特定需求:
應用程式可以藉由呼叫 GetDiskFreeSpace 函式來判斷磁片區磁區大小。 |
|
表示要求檔案資料,但應該繼續位於遠端儲存體中。 它不應該傳輸回本機儲存體。 此旗標適用于遠端儲存系統。 |
|
使用此旗標時,不會發生一般 重新分析點 處理,而 ReOpenFile 會嘗試開啟重新分析點。 開啟檔案時,會傳回檔案控制代碼,不論控制重新分析點的篩選是否正常運作。 這個旗標不能與 CREATE_ALWAYS 旗標搭配使用。 如果檔案不是重新分析點,則會忽略此旗標。 |
|
指示系統初始化 物件,讓處理傳回 ERROR_IO_PENDING花費大量時間的作業。 作業完成時,指定的事件會設定為已發出訊號的狀態。
當您指定 FILE_FLAG_OVERLAPPED時,檔案讀取和寫入函式 必須 指定 OVERLAPPED 結構。 也就是說,指定 FILE_FLAG_OVERLAPPED 時,應用程式 必須 執行重迭的讀取和寫入。 指定 FILE_FLAG_OVERLAPPED 時,系統不會維護檔案指標。 檔案位置必須當做 lpOverlapped 參數的一部分傳遞, (指向 重迭 結構,) 至檔案讀取和寫入函式。 此旗標也可讓多個作業與控制碼同時執行, (同時讀取和寫入作業,例如) 。 |
|
表示要根據 POSIX 規則存取檔案。 這包括針對支援這類命名的檔案系統,允許具有名稱的多個檔案,唯有不同。 使用此選項時請小心,因為針對 MS-DOS 或 16 位 Windows 撰寫的應用程式可能無法存取以這個旗標建立的檔案。 |
|
表示檔案是隨機存取的。 系統可使用這個做為最佳化檔案快取的提示。 |
|
表示檔案是按順序從開頭至結尾依序存取。 系統可使用這個做為最佳化檔案快取的提示。 如果應用程式藉移動檔案指標來進行隨機存取,則可能不會發生最佳快取;然而,仍然保證正確的作業。
針對使用循序存取讀取大型檔案的應用程式,指定此旗標可能會提高效能。 對於大部分循序讀取大型檔案的應用程式,效能提升可能更明顯,但偶爾會略過少量的位元組範圍。 |
|
指示系統透過任何中繼快取寫入,並直接移至磁片。 系統仍然可以快取寫入作業,但無法延遲排清。 |
如果控制碼代表具名管道的用戶端, dwFlags 參數也可以包含安全性服務品質資訊。 如需詳細資訊,請參閱 模擬層級。 當呼叫應用程式指定 SECURITY_SQOS_PRESENT 旗標時, dwFlags 參數可以包含下列一或多個值。
傳回值
如果函式成功,則傳回值是指定檔案的開啟控制碼。
如果函式失敗,傳回值會 INVALID_HANDLE_VALUE。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
dwFlags參數不能包含任何檔案屬性旗標, (FILE_ATTRIBUTE_*) 。 只有在建立檔案時,才能指定這些專案。
在 Windows 8 和 Windows Server 2012 中,下列技術支援此函式。
技術 | 支援 |
---|---|
伺服器訊息區 (SMB) 3.0 通訊協定 | Yes |
SMB 3.0 透明容錯移轉 (TFO) | 是 |
具有向外延展檔案共用的 SMB 3.0 (SO) | 是 |
叢集共用磁片區檔案系統 (CsvFS) | Yes |
彈性檔案系統 (ReFS) | 是 |
規格需求
最低支援的用戶端 | Windows Vista [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | winbase.h (包含 Windows.h) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |