2015-04-20 160 views

回答

2

WriteFileGather將永遠不會覆蓋該文件,除非你問 - 它沒有暗示覆蓋/附加選項,只有一個'請寫入數據在文件位置X選項'。

你應該正常打開的文件句柄(確保你有GENERIC_WRITE訪問和使用CreateFile

至少指定國旗標誌FILE_FLAG_OVERLAPPEDFILE_FLAG_NO_BUFFERING然後你使用Offset設置文件寫入的位置,在OVERLAPPEDOffsetHigh成員傳遞中的第5個參數

這是類似的方式WriteFile作品時,其在異步模式下運行 - 你必須指定的位置寫在。它可能更容易學習如何使用WriteFile首先進行位置異步寫入,然後移動到WriteFileGather,如果您需要其額外的權力。

請參閱here瞭解文檔。

編輯:要回答哈利的評論,爲了得到文件的結尾,你可以記住你之前寫過多少(假設這是你創建的一個新文件),或者使用HANDLE獲取當前文件的大小具有距離0的SetFilePointerEx和方法FILE_END,這將返回給您文件的結尾。還有其他方法可以獲得文件大小,但要注意可能會得到一個緩存的答案(例如,如果遍歷目錄),因此建議使用上述方法。

+0

@哈利約翰斯頓:它不會覆蓋現有的文件作爲問題/暗示的問題。它可能會覆蓋文件的有效內容_,如果您要求通過設置已存在的數據的偏移量來確定_ –

+0

@Harry Johnston - 編輯的第一段要清楚 –

相關問題