資訊: FILE_FLAG_WRITE_THROUGH 和 FILE_FLAG_NO_BUFFERING

文章翻譯 文章翻譯
文章編號: 99794 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

結論

CreateFile() FILE_FLAG_WRITE_THROUGH 旗標會使任何對該控制代碼所做直接寫入檔案而不被緩衝的寫入。資料快取 (儲存在磁碟快取中) ; 不過,它仍然直接寫入檔案。這個方法允許在該資料來滿足讀取的要求從快取資料 (如果它還在那裡) 上的讀取的作業,而不需要進行檔案讀取以取得資料。寫入呼叫不傳回直到資料寫入至檔案。這適用於遠端的寫入--網路重新導向器會傳遞 FILE_FLAG_WRITE_THROUGH 旗標至伺服器,讓伺服器知道不以滿足寫入要求,直到將資料寫入至檔案。

[FILE_FLAG_NO_BUFFERING 進一步採用這個概念的一個步驟,並排除所有緩衝先期讀取檔案和磁碟快取同時也使所有讀取都保證從檔案] 以及 [不能從任何系統緩衝區或磁碟快取。磁碟使用 [FILE_FLAG_NO_BUFFERING 時讀取和寫入必須完成磁扇區界限上並緩衝區位址必須在記憶體中的磁碟磁扇區界限對齊。

這些限制是必要的因為您傳遞給讀取或寫入 API 緩衝區直接用於 I/O 裝置層級 ; 在該層級、 緩衝區位址及磁扇區大小必須滿足任何處理器和媒體的對齊方式限制的硬體執行。

其他相關資訊

Windows 95 CDFS (光碟檔案系統) 並不支援 CreateFile() FILE_FLAG_NO_BUFFERING 旗標。在 Windows 95 FSD 例如 VFAT,可能會實作、 FILE_FLAG_NO_BUFFERING 不是必要的旗標的檔案系統驅動程式和不支援的 CDFS 時。

這個程式碼片段示範如何磁扇區對齊在緩衝區中的資料,並將它傳遞給 CreateFile():
  char buf[2 * SECTOR_SIZE - 1], *p;

  p = (char *) ((DWORD) (buf + SECTOR_SIZE - 1) & ~(SECTOR_SIZE - 1));
  h = CreateFile(argv[1], GENERIC_READ | GENERIC_WRITE,
      FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,
      FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING, NULL);
  WriteFile(h, p, SECTOR_SIZE, &dwWritten, NULL);

				
指標 p 是磁扇區對齊,而緩衝區中所指向的點。

如果您想要清除目前的邏輯磁碟機上所有開啟的檔案位置的情況下這可以透過來完成:
   hFile = CreateFile("\\\\.\\c:", ....);
   FlushFileBuffers(hFile);
				
這個方法會導致排清,並寫入磁碟 C: 磁碟分割上的所有開啟檔案的所有已緩衝的寫入資料。請注意完成的任何項目以外,系統並不會受到此排清; 任何緩衝緩衝 C 執行階段執行 C 執行階段常式使用開啟的檔案上任何可能檔案不會受到影響。

開啟遠端檔案在網路上時, 伺服器永遠會快取,並忽略沒有用戶端所指定的緩衝旗幟。這是經過設計規劃的。 重新導向器和伺服器無法適當地實作在網路上的 FILE_FLAG_NO_BUFFERING 完整語意。在特別不能是符合的磁區大小、 對齊磁扇區的 I/O 需求。因此時 Win32-基礎應用程式要求的 FILE_FLAG_NO_BUFFERING,, 重新導向器和伺服器將這個視為要求的 FILE_FLAG_WRITE_THROUGH。檔案不會快取在用戶端、 寫入請直接在伺服器和磁碟在伺服器上,並讀取/寫入大小在網路上完全是應用程式要求提供。不過,檔案快取在伺服器上。

無法快取在用戶端可以有一個不同的效果 I/O 類型而定。消除快取觸及數或預先,讀取,但也可能會降低的大小會傳輸和接收。在一般循序 I/O 很用戶端上的快取一個好辦法。基於小型、 隨機存取 I/O,最佳的做法就是通常不到快取。

屬性

文章編號: 99794 - 上次校閱: 2006年11月21日 - 版次: 4.2
這篇文章中的資訊適用於:
  • Microsoft Win32 Application Programming Interface?應用於:
    • Microsoft Windows NT Advanced Server 3.1
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows NT 4.0
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • the operating system: Microsoft Windows 2000
    • Microsoft Windows Millennium Edition
    • the operating system: Microsoft Windows XP
關鍵字:?
kbmt kbapi kbfileio kbinfo kbkernbase KB99794 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:99794
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com