Использование Windows API WriteFileGather
Я записываю файл на диск.
Я хочу добавить новые буферы в существующий файл.
Какой способ предотвратить WriteFileGather
от перезаписи существующего файла?
WriteFileGather
никогда не будет перезаписывать файл, если вы не попросите об этом — нет подразумеваемой опции перезаписи / добавления, есть ТОЛЬКО «пожалуйста, пишите данные в положение файла X».
Вы должны открыть дескриптор файла нормально (убедившись, что у вас есть GENERIC_WRITE
доступ и указание флагов как минимум флагов FILE_FLAG_OVERLAPPED
а также FILE_FLAG_NO_BUFFERING
используя CreateFile
Затем вы устанавливаете позицию, в которую записывает файл, используя Offset
а также OffsetHigh
члены OVERLAPPED
вы передаете в качестве 5-го параметра.
Это похоже на способ WriteFile
работает, когда работает в асинхронном режиме — вы должен укажите позицию для записи. Вероятно, легче научиться делать позиционные асинхронные записи, используя WriteFile
сначала перейдите на WriteFileGather
если вам нужна его дополнительная сила.
Увидеть Вот для документов.
РЕДАКТИРОВАТЬ: Чтобы ответить на комментарий Гарри, чтобы получить конец файла, вы можете либо вспомнить, сколько вы написали ранее (предполагая, что это новый файл, который вы создали), или получить текущий размер файла из РУЧКИ, используя SetFilePointerEx с расстоянием 0 и метод FILE_END, который вернет вам конец файла. Существуют и другие способы получения размера файла, но имейте в виду, что вы можете получить кэшированный ответ (например, при переборе по каталогу), поэтому рекомендуется описанное выше.