WriteFileGather — добавлять буферы в файл

Использование Windows API WriteFileGatherЯ записываю файл на диск.
Я хочу добавить новые буферы в существующий файл.
Какой способ предотвратить WriteFileGather от перезаписи существующего файла?

1

Решение

WriteFileGather никогда не будет перезаписывать файл, если вы не попросите об этом — нет подразумеваемой опции перезаписи / добавления, есть ТОЛЬКО «пожалуйста, пишите данные в положение файла X».

Вы должны открыть дескриптор файла нормально (убедившись, что у вас есть GENERIC_WRITE доступ и указание флагов как минимум флагов FILE_FLAG_OVERLAPPED а также FILE_FLAG_NO_BUFFERING используя CreateFile

Затем вы устанавливаете позицию, в которую записывает файл, используя Offset а также OffsetHigh члены OVERLAPPED вы передаете в качестве 5-го параметра.

Это похоже на способ WriteFile работает, когда работает в асинхронном режиме — вы должен укажите позицию для записи. Вероятно, легче научиться делать позиционные асинхронные записи, используя WriteFile сначала перейдите на WriteFileGather если вам нужна его дополнительная сила.

Увидеть Вот для документов.

РЕДАКТИРОВАТЬ: Чтобы ответить на комментарий Гарри, чтобы получить конец файла, вы можете либо вспомнить, сколько вы написали ранее (предполагая, что это новый файл, который вы создали), или получить текущий размер файла из РУЧКИ, используя SetFilePointerEx с расстоянием 0 и метод FILE_END, который вернет вам конец файла. Существуют и другие способы получения размера файла, но имейте в виду, что вы можете получить кэшированный ответ (например, при переборе по каталогу), поэтому рекомендуется описанное выше.

2

Другие решения


По вопросам рекламы [email protected]