Как выполнить CopyFile в небуферизованном режиме?

Клиент копировал файл с помощью CopyFile, но хотел, чтобы дескрипторы файлов открывались с флагом FILE_FLAG_NO_BUFFERING.

Некоторое время назад мы заметили, что можно использовать функцию обратного вызова прогресса для CopyFileEx или CopyFile2, чтобы сбросить буфер выводимого дескриптора. Может быть, мы сможем использовать обратный вызов прогресса, чтобы открыть дескриптор без буферизации?

Нет, это не сработает, потому что обратный вызов прогресса получает уже открытый дескриптор. Нельзя изменить его флаг буферизации задним числом.

Но это нормально, потому что CopyFileEx и CopyFile2 также имеют параметр flags, и один из флагов — COPY_FILE_NO_BUFFERING, что означает, что дескриптор должен быть открыт с FILE_FLAG_NO_BUFFERING.

То же самое можно сделать с CopyFile2, но флаги находятся в структуре параметров options.

Рэймонд участвует в эволюции Windows более 30 лет. В 2003 году он запустил веб‑сайт под названием The Old New Thing, который стал популярнее, чем он мог себе представить, и это по сей день вызывает у него беспокойство. Веб‑сайт породил книгу с тем же названием The Old New Thing (Addison Wesley, 2007). Время от времени он появляется в аккаунте Windows Dev Docs в Twitter, чтобы рассказывать истории, не несущие полезной информации.

Обсуждение закрыто. Войдите в систему, чтобы редактировать/удалять существующие комментарии.

Комментарии, которые идут в код, по сравнению с теми, которые идут в описании pull‑request

Небольшой вспомогательный класс для управления LPPROC_THREAD_ATTRIBUTE_LISTs