共用方式為


mmioOpen 函式 (mmiscapi.h)

mmioOpen 函式會開啟未緩衝或緩衝 I/O 的檔案;會建立檔案;刪除檔案;或檢查檔案是否存在。 檔案可以是標準檔案、記憶體檔案或自定義儲存系統的元素。 mmioOpen 傳回的句柄不是標準檔案句柄;請勿將它與多媒體檔案 I/O 函式以外的任何檔案 I/O 函式搭配使用。

注意 此函式已被取代。 應用程式應該呼叫 CreateFile 來建立或開啟檔案。
 

語法

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) 檔句柄的標準 (。
檔名不應超過 128 個字元,包括終止的 NULL 字元。

開啟記憶體檔案時,將 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 檔案句柄,因此請勿嘗試關閉檔案。
注意 應用程式應該改為呼叫 GetFileAttributesGetFileAttributesEx
 
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
MMIOERR_ACCESSDENIED
檔案受到保護且無法開啟。
MMIOERR_INVALIDFILE
發生另一個失敗狀況。 這是開啟檔案失敗的預設錯誤。
MMIOERR_NETWORKERROR
網路未回應開啟遠端檔案的要求。
MMIOERR_PATHNOTFOUND
目錄規格不正確。
MMIOERR_SHARINGVIOLATION
檔案正由另一個應用程式使用,無法使用。
MMIOERR_TOOMANYOPENFILES
同時開啟的檔案數目上限為 。 系統已用盡可用的檔句柄。

備註

如果 lpmmioinfo 指向 MMIOINFO 結構,請初始化 結構的成員,如下所示。 所有未使用的成員都必須設定為零,包括保留的成員。

  • 若要要求以已安裝的 I/O 程式開啟檔案,請將 IOProc 設定為 I/O 程式的四個字元代碼,並將 pIOProc 設定為 NULL
  • 若要要求以卸載的 I/O 程式開啟檔案,請將 IOProc 設定為指向 I/O 程式,並將 其設定null
  • 若要要求 mmioOpen 判斷要使用哪一個 I/O 程式,根據 szFilename 中包含的檔名開啟檔案,請將 smsIOProcpIOProc 設定為 NULL。 如果未指定 MMIOINFO 結構,這是預設行為。
  • 若要使用內部配置的和管理緩衝區開啟記憶體檔案,請將 pchBuffer 設定為 NULL將FOURCC_MEMcchBuffer 設定為緩衝區的初始大小, 並將 adwInfo 設定為緩衝區的累加擴充大小。 必要時,此記憶體檔案會自動以 adwInfo 中指定的位元元組數目遞增擴充。 指定 dwOpenFlags 參數的MMIO_CREATE旗標,以一開始將檔案結尾設定為緩衝區的開頭。
  • 若要使用應用程式提供的緩衝區開啟記憶體檔案,請將 pchBuffer 設定為指向記憶體緩衝區、將FOURCC_MEM,cchBuffer 設定為緩衝區的大小,並將 adwInfo 設定為緩衝區的累加擴充大小。 只有在 pchBuffer 是呼叫 GlobalAllocGlobalLock 函式取得的指標時,adwInfo 中的擴充大小才應該是非零的;在此情況下,將會呼叫 GlobalReAlloc 函式來展開緩衝區。 換句話說,如果 pchBuffer 指向本機或全域陣列或本機堆積中的記憶體區塊, adwInfo 必須是零。 指定 dwOpenFlags 參數的MMIO_CREATE旗標,以一開始將檔案結尾設定為緩衝區的開頭。 否則,會將整個記憶體區塊視為可讀取。
  • 若要使用目前開啟的標準檔案句柄 (,使用多媒體檔案 I/O 服務) 沒有 HMMIO 類型的檔案句柄、將 FOURCC_DOSpchBuffer 設定為 NULL,並將 adwInfo 設定為標準檔句柄。 檔案內的位移會相對於檔案的開頭,而且與 呼叫 mmioOpen 時的標準檔案中的位置無關;呼叫 mmioOpen 時,初始多媒體檔案 I/O 位移會與標準檔案中的位移相同。 若要關閉多媒體檔案 I/O 檔案句柄而不關閉標準檔案句柄,請將 MMIO_FHOPEN 旗標傳遞至 mmioClose
您必須呼叫 mmioClose ,才能使用 mmioOpen 關閉開啟的檔案。 當應用程式結束時,不會自動關閉開啟的檔案。

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 mmiscapi.h (包括 Mmiscapi.h、Windows.h)
程式庫 Winmm.lib
Dll Winmm.dll