Как запросить небуферизованное копирование файла в Win32

У функции CopyFile нет параметра для запроса небуферизованного копирования. В Win32 есть более гибкие варианты API, позволяющие задать соответствующее поведение при запуске операции.

Где передать флаг

В CopyFileEx для этого предусмотрен флаг COPY_FILE_NO_BUFFERING, который передаётся в параметре флагов функции. В CopyFile2 тот же запрос задаётся через поле dwCopyFlags структуры COPYFILE2_EXTENDED_PARAMETERS.

Пытаться включить FILE_FLAG_NO_BUFFERING в обработчике прогресса бесполезно: callback получает дескрипторы уже после их открытия. Сброс системного файлового кеша и выбор режима открытия — разные действия, поэтому флаг нужно указывать при инициации копирования.

Что означает режим без буферизации

Обход системного кэширования файлов не означает отключение всех уровней кеширования устройства и не гарантирует ускорение операции. Эффект зависит от задачи, размера и типа файлов, а также от носителя и его драйверов. Выбирайте подходящий API, проверяйте возвращаемые коды ошибок и измеряйте поведение на реальной конфигурации, чтобы убедиться, что режим соответствует требованиям.