Je regarde un répertoire en appelant le ReadDirectoryChangesW
de manière synchrone. Quand un nouveau fichier est disponible, j'essaie d'y accéder immédiatement avec CreateFile
avec GENERIC_READ
et FILE_SHARE_READ
, mais cela me donne ERROR_SHARING_VIOLATION
. Le processus qui place le fichier dans le répertoire surveillé ne termine pas l'écriture au moment où j'essaie de le lire.En attente de lecture d'un fichier avec Win32
Existe-t-il un moyen d'attendre de manière fiable que le fichier soit disponible en lecture? Je peux mettre la méthode en boucle comme celle ci-dessous, mais j'espère qu'il y aura un meilleur moyen.
while ((hFile = CreateFile (path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
{
if (GetLastError() == ERROR_SHARING_VIOLATION)
Sleep (500);
else
break; // some other error occurred
}
if (hFile == INVALID_HANDLE_VALUE)
{
// deal with other error
return 0;
}
ReadFile (...);
Je suppose que c'est C++? S'il s'agit de C#, il existe un objet SystemFileWatcher dans la BCL que vous pouvez utiliser. –
Win32 == C API, je vais retag. – dreamlax