winbase.h (OpenFile 函式)
建立、開啟、重新開啟或刪除檔案。
語法
HFILE OpenFile(
[in] LPCSTR lpFileName,
[out] LPOFSTRUCT lpReOpenBuff,
[in] UINT uStyle
);
參數
[in] lpFileName
檔案的名稱。
字串必須包含來自 8 位 Windows 字元集的字元。 OpenFile函式不支援 Unicode 檔案名或開啟具名管道。
[out] lpReOpenBuff
OFSTRUCT結構的指標,會在第一次開啟檔案時接收檔案的相關資訊。
結構可用於 後續對 OpenFile 函式的呼叫,以查看開啟的檔案。
OFSTRUCT結構包含長度限制為OFS_MAXPATHNAME字元的路徑字串成員,長度為 128 個字元。 因此,您無法使用 OpenFile 函式來開啟路徑長度超過 128 個字元的檔案。 CreateFile函式沒有此路徑長度限制。
[in] uStyle
要採取的動作。
此參數可以是下列一或多個值。
值 | 意義 |
---|---|
|
忽略。
若要產生包含 [取消 ] 按鈕的對話方塊,請使用 OF_PROMPT。 |
|
建立新檔案。
如果檔案存在,則會截斷為零 (0) 長度。 |
|
刪除檔案。 |
|
開啟檔案,然後關閉它。
使用此專案來測試檔案是否存在。 |
|
填滿 OFSTRUCT 結構,但不會執行任何其他動作。 |
|
如果要求的檔案不存在,則會顯示對話方塊。
對話方塊會通知使用者系統找不到檔案,且其中包含 [重試 ] 和 [ 取消] 按鈕。 [ 取消] 按鈕會指示 OpenFile 傳回找不到檔案的錯誤訊息。 |
|
開啟檔案為僅供讀取。 |
|
以讀取/寫入權限開啟檔案。 |
|
使用重新開啟緩衝區中的資訊開啟檔案。 |
|
針對 MS-DOS 型檔案系統,開啟具有相容性模式的檔案,允許指定電腦上的任何進程任意次數開啟檔案。
開啟具有其他共用模式之檔案的其他工作失敗。 此旗標會對應至|CreateFile函式的FILE_SHARE_READ FILE_SHARE_WRITE旗標。 |
|
開啟檔案,而不拒絕其他進程的讀取或寫入存取權。
在 MS-DOS 型檔案系統上,如果檔案已由任何其他進程以相容性模式開啟,則函式會失敗。 此旗標會對應至|CreateFile函式的FILE_SHARE_READ FILE_SHARE_WRITE旗標。 |
|
開啟檔案,並拒絕對其他進程的讀取存取。
在 MS-DOS 型檔案系統上,如果檔案已以相容性模式開啟,或供任何其他進程讀取存取,則函式會失敗。 此旗標會對應至CreateFile函式的FILE_SHARE_WRITE旗標。 |
|
開啟檔案,並拒絕其他進程的寫入存取權。
在 MS-DOS 型檔案系統上,如果檔案是以相容性模式開啟,或是任何其他進程的寫入存取權,則函式會失敗。 此旗標會對應至CreateFile函式的FILE_SHARE_READ旗標。 |
|
開啟具有獨佔模式的檔案,並拒絕其他進程的讀取/寫入存取。 如果檔案已在任何其他模式中開啟以進行讀取/寫入存取,即使目前進程也一樣,函式也會失敗。 |
|
確認檔案的日期和時間與先前開啟的日期和時間相同。
這對於唯讀檔案的額外檢查很有用。 |
|
以僅限寫入存取的形式開啟檔案。 |
傳回值
如果函式成功,傳回值會指定執行檔案 I/O 時要使用的檔案控制代碼。 若要關閉檔案,請使用這個控制碼呼叫 CloseHandle 函式。
如果函式失敗,傳回值會 HFILE_ERROR。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
如果 lpFileName 參數只指定檔案名和副檔名,此函式會在下列目錄中搜尋相符的檔案,並依顯示的順序進行搜尋:
- 載入應用程式的目錄。
- 目前的目錄。
-
Windows system 目錄。
使用 GetSystemDirectory 函式來取得此目錄的路徑。
-
16 位 Windows 系統目錄。
沒有可擷取此目錄路徑的函式,但會加以搜尋。
-
Windows 目錄。
使用 GetWindowsDirectory 函 式來取得此目錄的路徑。
- PATH 環境變數中所列的目錄。
OpenFile函式不支援 16 位 Windows OpenFile函式支援的OF_SEARCH旗標。 即使檔案名包含完整路徑, OF_SEARCH 旗標也會指示系統搜尋相符的檔案。 使用 SearchPath 函式來搜尋檔案。
如果嘗試在 uStyle 參數的值是 OF_DELETE存取旗 標或以任何其他存取旗標開啟遠端檔案或目錄,且遠端檔案或目錄尚未以共用存取權 FILE_SHARE_DELETE 開啟時,就會發生共用違規。 若要避免此案例中的共用違規,請只開啟 具有OF_DELETE 存取權的遠端檔案或目錄,或呼叫 DeleteFile 而不先開啟檔案或目錄以進行刪除。
在 Windows 8 和 Windows Server 2012 中,下列技術支援此函式。
技術 | 支援 |
---|---|
伺服器訊息區 (SMB) 3.0 通訊協定 | Yes |
SMB 3.0 透明容錯移轉 (TFO) | Yes |
具有向外延展檔案共用的 SMB 3.0 (SO) | Yes |
叢集共用磁片區檔案系統 (CsvFS) | Yes |
彈性檔案系統 (ReFS) | Yes |
CsvF 會針對壓縮檔進行重新導向的 IO。
規格需求
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | winbase.h (包含 Windows.h) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |