При ожидании, пока файл не доступен для чтения с Win32

Не пишите свое собственное программное обеспечение именно так, можно "съесть собственный корм для собак". Вы просто создаете больше работы, когда Вы могли, вероятно, купить программное обеспечение, которое делает то же самое (и лучше) в течение меньшего количества времени и потраченных денег.

8
задан tshepang 13 October 2014 в 06:33
поделиться

3 ответа

Я не знаю API пользовательского режима для уведомлений о закрытых файлах. Предложенная вами петля действительно, вероятно, лучший способ. Единственное, что вы могли бы сделать, это наблюдать за CloseFile в драйвере фильтра, а также в Process Monitor, но фу ...

2
ответ дан 5 December 2019 в 15:24
поделиться

Я не думаю, что есть уведомление о том, что вы ищете, но в качестве улучшения я бы предложил прогрессивные задержки. Таким образом, вы получите быстрое время отклика на такие вещи, как перетаскивание и победа. Если пользователь держит файл открытым в Excel в течение часа.

int delay= 10;
while ((hFile = CreateFile (path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
{
    if (GetLastError() == ERROR_SHARING_VIOLATION) {
        Sleep (delay);
        if (delay<5120) // max delay approx 5.Sec
            delay*= 2;
    }
    else
        break; // some other error occurred
}
7
ответ дан 5 December 2019 в 15:24
поделиться

Если вы знаете что-нибудь о том, как создается файл, возможно, подождите, пока файл перестанет расти в течение X секунд, или дождитесь удаления файла-дозорного. Или почувствуйте состояние программы, которая их создает.

0
ответ дан 5 December 2019 в 15:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: