Ожидание дескриптора файла, пока он не увеличится до определенного размера

#c #windows

#c #Windows

Вопрос:

Существует компонент-A, который загружает содержимое из некоторого источника и записывает его в файл. Другой компонент-B, которому необходимо дождаться завершения операции загрузки записи компонентом-A.

Размер файла известен до передачи компоненту B.

Условие: Компонент-A не может сигнализировать о завершении операции записи.

Компонент B должен каким-то образом определить, что файл увеличился до ожидаемого размера, и начать его чтение.

Каков наилучший способ сделать это? Тривиальный способ — проверить размер через некоторые промежутки времени.

Есть ли способ дождаться дескриптора файла, пока он не увеличится до ожидаемого размера?

Комментарии:

1. Является ли условие ограничением или выбором дизайна? :v

2. это ограничение компонента-A. Он не знает о размере файла. Он получает содержимое из какого-либо другого источника и продолжает записывать его в файл. Некоторые устаревшие вещи, чувак

Ответ №1:

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

Полезным вариантом было бы вызвать ReadDirectoryChangesW , но это сопряжено со своим набором подводных камней (это работает с именами файлов, а не с дескрипторами; имена файлов могут быть длинными или короткими, гарантии не даются; вам придется использовать более сложный асинхронный рабочий процесс, потому что синхронизация не предлагает ничего лучшего, чем то, что у вас уже есть).

В целом, если ваши требования не нарушены, то использование таймера звучит неплохо, и это, безусловно, значительно упростит код.