mmioOpen 函式 (mmiscapi.h)
mmioOpen 函式會開啟未緩衝或緩衝 I/O 的檔案;會建立檔案;刪除檔案;或檢查檔案是否存在。 檔案可以是標準檔案、記憶體檔案或自定義儲存系統的元素。 mmioOpen 傳回的句柄不是標準檔案句柄;請勿將它與多媒體檔案 I/O 函式以外的任何檔案 I/O 函式搭配使用。
語法
HMMIO mmioOpen(
LPSTR pszFileName,
LPMMIOINFO pmmioinfo,
DWORD fdwOpen
);
參數
pszFileName
緩衝區的指標,其中包含檔名。 如果未指定 I/O 程式來開啟檔案,檔名會決定檔案的開啟方式,如下所示:
- 如果檔名不包含加號 (+) ,則會假設它是標準檔名 (,也就是類型不是 HMMIO) 的檔案。
- 如果檔名的格式為 EXAMPLE。EXT+ABC 會假設延伸模組 EXT 會識別已安裝的 I/O 程式,此程式會呼叫以在檔案上執行 I/O。 如需詳細資訊,請參閱 mmioInstallIOProc。
- 如果檔名為 NULL,且未提供任何 I/O 程式,則會假設 MMIOINFO 結構的 adwInfo 成員為目前開啟檔案之非 HMMIO) 檔句柄的標準 (。
開啟記憶體檔案時,將 szFilename 設定為 NULL。
pmmioinfo
MMIOINFO 結構的指標,其中包含 mmioOpen 所使用的額外參數。 除非您開啟記憶體檔案、指定緩衝 I/O 的緩衝區大小,或指定要開啟檔案的卸載 I/O 程式,否則此參數應該是 NULL。 如果此參數不是 NULL,它所參考 之 MMIOINFO 結構的所有未使用成員都必須設定為零,包括保留的成員。
fdwOpen
開啟作業的旗標。 MMIO_READ、MMIO_WRITE和MMIO_READWRITE旗標互斥 ,只應該指定一個旗標。 MMIO_COMPAT、MMIO_EXCLUSIVE、MMIO_DENYWRITE、MMIO_DENYREAD和MMIO_DENYNONE旗標是檔案共用旗標。 定義下列值。
值 | 意義 |
---|---|
MMIO_ALLOCBUF | 開啟緩衝 I/O 的檔案。 若要配置大於或小於默認緩衝區大小 (8K 的緩衝區,定義為 MMIO_DEFAULTBUFFER) ,請將 MMIOINFO 結構的 cchBuffer 成員設定為所需的緩衝區大小。 如果 cchBuffer 為零,則會使用默認緩衝區大小。 如果您要提供自己的 I/O 緩衝區,則不應該使用此旗標。 |
MMIO_COMPAT | 以相容性模式開啟檔案,允許指定計算機上的任何進程隨時開啟檔案。 如果檔案已以任何其他共用模式開啟, mmioOpen 就會失敗。 |
MMIO_CREATE | 建立新檔案。 如果檔案已經存在,則會截斷為零長度。 對於記憶體檔案,此旗標表示檔案的結尾一開始是在緩衝區的開頭。 |
MMIO_DELETE | 刪除檔案。 如果指定此旗標, szFilename 不應為 NULL。 如果已成功刪除檔案,則傳回值為 TRUE (轉換成 HMMIO) 否則 為 FALSE 。 請勿針對已刪除的檔案呼叫 mmioClose 函式。 如果指定此旗標,則會忽略開啟檔案的所有其他旗標。 |
MMIO_DENYNONE | 開啟檔案,而不拒絕其他進程讀取或寫入檔案的存取權。 如果檔案已由任何其他進程以相容性模式開啟, mmioOpen 就會失敗。 |
MMIO_DENYREAD | 開啟檔案,並拒絕其他進程讀取檔案的存取權。 如果檔案已以相容性模式開啟,或供任何其他進程讀取存取, mmioOpen 就會失敗。 |
MMIO_DENYWRITE | 開啟檔案,並拒絕其他進程寫入檔案的存取權。 如果檔案已以相容性模式開啟,或任何其他進程的寫入存取權, mmioOpen 就會失敗。 |
MMIO_EXCLUSIVE | 開啟檔案,並拒絕其他進程讀取和寫入檔案的存取權。 如果檔案已在任何其他模式中開啟以進行讀取或寫入存取,即使目前進程也一樣, mmioOpen 也會 失敗。 |
MMIO_EXIST | 判斷指定的檔案是否存在,並從 szFilename 中指定的路徑建立完整檔名。 如果資格成功且檔案存在或 FALSE,則傳回值為 TRUE (轉換成 HMMIO) 。 檔案未開啟,而且函式不會傳回有效的多媒體檔案 I/O 檔案句柄,因此請勿嘗試關閉檔案。
注意 應用程式應該改為呼叫 GetFileAttributes 或 GetFileAttributesEx 。
|
MMIO_GETTEMP |
使用 szFilename 中傳遞的參數,選擇性地建立暫存檔名。例如,您可以指定 「C:F」 來建立位於磁碟驅動器 C 上的暫存盤,開頭為字母 「F」。 產生的檔名會複製到 szFilename 所指向的緩衝區。 緩衝區必須夠大,才能保存至少 128 個字元。
如果已成功建立暫存檔名,傳回值 會MMSYSERR_NOERROR (轉換成 HMMIO) 。 否則,傳回值 會MMIOERR_FILENOTFOUND 。 檔案未開啟,而且函式不會傳回有效的多媒體檔案 I/O 檔案句柄,因此請勿嘗試關閉檔案。 此旗標會覆寫所有其他旗標。 注意 應用程式應該改為呼叫 GetTempFileName 。
|
MMIO_PARSE |
從 szFilename 中指定的路徑建立完整檔名。 完整名稱會複製到 szFilename 所指向的緩衝區。 緩衝區必須夠大,才能保存至少 128 個字元。
如果函式成功,則傳回值為 TRUE , (轉換成 HMMIO) 。 否則,傳回值為 FALSE。 檔案未開啟,而且函式不會傳回有效的多媒體檔案 I/O 檔案句柄,因此請勿嘗試關閉檔案。 如果指定這個旗標,則會忽略所有開啟檔案的旗標。 注意 應用程式應該改為呼叫 GetFullPathName 。
|
MMIO_READ | 開啟檔案為僅供讀取。 如果未指定MMIO_WRITE和MMIO_READWRITE,則這是預設值。 |
MMIO_READWRITE | 開啟檔案以供讀取和寫入。 |
MMIO_WRITE | 開啟檔案為僅供寫入。 |
傳回值
傳回已開啟檔案的句柄。 如果無法開啟檔案,則傳回值為 NULL。 如果 lpmmioinfo 不是 NULL,MMIOINFO 結構的 wErrorRet 成員將包含下列其中一個錯誤值。
傳回碼 | Description |
---|---|
|
檔案受到保護且無法開啟。 |
|
發生另一個失敗狀況。 這是開啟檔案失敗的預設錯誤。 |
|
網路未回應開啟遠端檔案的要求。 |
|
目錄規格不正確。 |
|
檔案正由另一個應用程式使用,無法使用。 |
|
同時開啟的檔案數目上限為 。 系統已用盡可用的檔句柄。 |
備註
如果 lpmmioinfo 指向 MMIOINFO 結構,請初始化 結構的成員,如下所示。 所有未使用的成員都必須設定為零,包括保留的成員。
- 若要要求以已安裝的 I/O 程式開啟檔案,請將 IOProc 設定為 I/O 程式的四個字元代碼,並將 pIOProc 設定為 NULL。
- 若要要求以卸載的 I/O 程式開啟檔案,請將 IOProc 設定為指向 I/O 程式,並將 其設定 為 null。
- 若要要求 mmioOpen 判斷要使用哪一個 I/O 程式,根據 szFilename 中包含的檔名開啟檔案,請將 smsIOProc 和 pIOProc 設定為 NULL。 如果未指定 MMIOINFO 結構,這是預設行為。
- 若要使用內部配置的和管理緩衝區開啟記憶體檔案,請將 pchBuffer 設定為 NULL、 將FOURCC_MEM 、 cchBuffer 設定為緩衝區的初始大小, 並將 adwInfo 設定為緩衝區的累加擴充大小。 必要時,此記憶體檔案會自動以 adwInfo 中指定的位元元組數目遞增擴充。 指定 dwOpenFlags 參數的MMIO_CREATE旗標,以一開始將檔案結尾設定為緩衝區的開頭。
- 若要使用應用程式提供的緩衝區開啟記憶體檔案,請將 pchBuffer 設定為指向記憶體緩衝區、將FOURCC_MEM,cchBuffer 設定為緩衝區的大小,並將 adwInfo 設定為緩衝區的累加擴充大小。 只有在 pchBuffer 是呼叫 GlobalAlloc 和 GlobalLock 函式取得的指標時,adwInfo 中的擴充大小才應該是非零的;在此情況下,將會呼叫 GlobalReAlloc 函式來展開緩衝區。 換句話說,如果 pchBuffer 指向本機或全域陣列或本機堆積中的記憶體區塊, adwInfo 必須是零。 指定 dwOpenFlags 參數的MMIO_CREATE旗標,以一開始將檔案結尾設定為緩衝區的開頭。 否則,會將整個記憶體區塊視為可讀取。
- 若要使用目前開啟的標準檔案句柄 (,使用多媒體檔案 I/O 服務) 沒有 HMMIO 類型的檔案句柄、將 FOURCC_DOS 、 pchBuffer 設定為 NULL,並將 adwInfo 設定為標準檔句柄。 檔案內的位移會相對於檔案的開頭,而且與 呼叫 mmioOpen 時的標準檔案中的位置無關;呼叫 mmioOpen 時,初始多媒體檔案 I/O 位移會與標準檔案中的位移相同。 若要關閉多媒體檔案 I/O 檔案句柄而不關閉標準檔案句柄,請將 MMIO_FHOPEN 旗標傳遞至 mmioClose。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | mmiscapi.h (包括 Mmiscapi.h、Windows.h) |
程式庫 | Winmm.lib |
Dll | Winmm.dll |