建立檔案對應物件

對應檔案的第一個步驟是呼叫 CreateFile 函式來開啟檔案。 若要確保其他進程無法寫入對應檔案的部分,您應該以獨佔存取權開啟檔案。 此外,檔案控制碼應該保持開啟狀態,直到進程不再需要檔案對應物件為止。 取得獨佔存取權的簡單方法是在CreateFilefdwShareMode參數中指定零。 CreateFile傳回的控制碼是由CreateFileMapping 函式用來建立檔案對應物件。

CreateFileMapping 函式會傳回檔案對應物件的控制碼。 建立 檔案檢視 時,將會使用此控制碼,以便您可以存取共用記憶體。 當您呼叫 CreateFileMapping時,您可以指定物件名稱、要從檔案對應的位元組數目,以及對應記憶體的讀取/寫入權限。 呼叫 CreateFileMapping 的第一個程式會建立檔案對應物件。 呼叫現有物件的 CreateFileMapping 的進程會收到現有物件的控制碼。 您可以呼叫GetLastError函式,判斷建立或開啟CreateFileMapping成功呼叫或開啟檔案對應物件。 GetLastError 會將 NO_ERROR 傳回至建立進程, 並將ERROR_ALREADY_EXISTS 傳回後續進程。

如果存取旗標與CreateFile函式開啟檔案時指定的旗標衝突,CreateFileMapping 函式就會失敗。 例如,若要讀取和寫入檔案:

  • CreateFile的 fdwAccess參數中指定GENERIC_READGENERIC_WRITE值。
  • CreateFileMappingfdwProtect參數中指定PAGE_READWRITE值。

建立檔案對應物件不會認可實體記憶體,只會保留它。

檔案對應大小

檔案對應物件的大小與所對應的檔案大小無關。 不過,如果檔案對應物件大於檔案,則系統會在 CreateFileMapping 傳回之前展開檔案。 如果檔案對應物件小於檔案,系統只會對應檔案中的指定位元組數目。

CreateFileMappingdwMaximumSizeHighdwMaximumSizeLow參數可讓您指定要從檔案對應的位元組數目:

  • 例如,當您不想讓檔案的大小變更 (時,當對應唯讀檔案) 時,請呼叫CreateFileMapping並為dwMaximumSizeHigh 和 dwMaximumSizeLow指定零。 這樣做會建立與檔案完全相同大小的檔案對應物件。 否則,您必須計算或估計完成的檔案大小,因為檔案對應物件的大小是靜態的;建立之後,就無法增加或減少其大小。 嘗試以這種方式對應長度為零的檔案失敗,錯誤碼 為 ERROR_FILE_INVALID。 程式應該測試長度為零的檔案,並拒絕這類檔案。

  • 具名檔案所支援之檔案對應物件的大小受限於磁碟空間。 檔案檢視的大小僅限於未保留虛擬記憶體的最大可用連續區塊。 這最多 2 GB 減去進程已保留的虛擬記憶體。

您選取的檔案對應物件大小會控制您可以使用記憶體對應來「查看」檔案的程度。 如果您建立大小為 500 Kb 的檔案對應物件,則不論檔案大小為何,您只能存取檔案的前 500 Kb。 由於您不需要任何系統資源來建立較大的檔案對應物件,因此請建立檔案對應物件,該物件是檔案的大小 (將dwMaximumSizeHigh 和 dwMaximumSizeLow參數設定為零) 即使您不想要檢視整個檔案也一樣。 系統資源的成本是建立檢視並加以存取。

您可以檢視檔案的一部分,該部分不會從檔案開頭開始。 如需詳細資訊,請參閱 在檔案內建立檢視

建立檔案檢視

在檔案內建立檢視