使用Windows API的WriteFileGather
,我正在向磁盤寫入文件。 我想追加新的緩衝區到現有的文件。 防止WriteFileGather
覆蓋現有文件的方法是什麼?WriteFileGather - 將緩衝區追加到文件
1
A
回答
2
WriteFileGather
將永遠不會覆蓋該文件,除非你問 - 它沒有暗示覆蓋/附加選項,只有一個'請寫入數據在文件位置X選項'。
你應該正常打開的文件句柄(確保你有GENERIC_WRITE
訪問和使用CreateFile
至少指定國旗標誌FILE_FLAG_OVERLAPPED
和FILE_FLAG_NO_BUFFERING
然後你使用Offset
設置文件寫入的位置,在OVERLAPPED
的OffsetHigh
成員傳遞中的第5個參數
這是類似的方式WriteFile
作品時,其在異步模式下運行 - 你必須指定的位置寫在。它可能更容易學習如何使用WriteFile
首先進行位置異步寫入,然後移動到WriteFileGather
,如果您需要其額外的權力。
請參閱here瞭解文檔。
編輯:要回答哈利的評論,爲了得到文件的結尾,你可以記住你之前寫過多少(假設這是你創建的一個新文件),或者使用HANDLE獲取當前文件的大小具有距離0的SetFilePointerEx和方法FILE_END,這將返回給您文件的結尾。還有其他方法可以獲得文件大小,但要注意可能會得到一個緩存的答案(例如,如果遍歷目錄),因此建議使用上述方法。
相關問題
- 1. 將文件加載/流式傳輸到緩衝區/緩衝區
- 2. 追加陣列緩衝區
- 3. boost :: udp socket.recieve_from()將數據追加到緩衝區的末尾
- 4. 如何追加而不使用緩衝區或追加方法?
- 5. 將圖表添加到緩衝區中
- 6. 將視頻文件加載到C++中的緩衝區中
- 7. 追加1到32位數字到字符緩衝區
- 8. 如何將文件加載到緩衝區並在Emacs啓動時切換到緩衝區
- 9. 從緩衝區(* .ico文件)加載HICON
- 10. 元組追加到緩衝區中斯卡拉
- 11. JSP庫緩衝JavaScript和追加到
- 12. Emacs意外地將緩衝區切換到臨時緩衝區
- 13. 將緩衝區內容複製到另一個緩衝區
- 14. 將深度渲染緩衝區複製到深度緩衝區
- 15. 從NodeJS緩衝區到S3文件
- 16. 協議緩衝區文件?
- 17. 文件IO和緩衝區
- 18. 衝出緩衝區中的文件
- 19. 將Gtk#文本緩衝區內容保存到文件
- 20. EVAL在臨時緩衝區的每一行,並將結果追加到線
- 21. HDF5:「文件緩衝區」和「文件緩存」有什麼區別?
- 22. 使用緩衝型打字機追加文本文件java
- 23. C:讀取二進制文件到內存,更改緩衝區,寫入緩衝區到文件
- 24. 將stdout C文件流重定向到緩衝區
- 25. 如何將Java FloatBuffer(或任何緩衝區)保存到文件
- 26. 無法將文件的內容複製到緩衝區
- 27. 使用fread將文件的一部分讀取到緩衝區
- 28. 將文件的一部分複製到緩衝區中
- 29. Java加載圖像到緩衝區
- 30. 使用文件緩衝區循環加密文件
@哈利約翰斯頓:它不會覆蓋現有的文件作爲問題/暗示的問題。它可能會覆蓋文件的有效內容_,如果您要求通過設置已存在的數據的偏移量來確定_ –
@Harry Johnston - 編輯的第一段要清楚 –