Étant donné que j'ai une liste de tous les descripteurs de fichiers de tous les processus, comment puis-je savoir lesquelles de ces poignées verrouillent réellement un fichier? D'après ce que je comprends, je pourrais simplement essayer d'ouvrir les fichiers et essayer d'obtenir toutes les autorisations et si quelque chose ne va pas, je sais qu'il est verrouillé. Mais ce son est extrêmement inefficace. Je veux dire que j'ai déjà les poignées est-il impossible de vérifier quelles sont les permissions des poignées?Vérifiez si le fichier est verrouillé par un descripteur de fichier de processus
De préférence j'aimerais voir une solution qui fonctionne sur Windows XP et plus.
J'ai déjà recherché dans la fonction GetFileInformationByHandleEx, mais je n'ai rien trouvé à propos des autorisations d'accès. :/
Modifier: Je n'ai pas besoin d'informations en temps réel sur le verrouillage de fichier. Les fichiers sur lesquels je prévois de travailler seront verrouillés jusqu'à ce que certaines applications soient fermées ou ne soient pas verrouillées du tout.
Mieux vaut demander pardon que la permission –
Vous pouvez lire le "verrou" du fichier en essayant d'écrire sur le handle, puisque la lecture/écriture est seulement par le propriétaire du handle. – Joel
Il n'y a aucun moyen de le faire. Tout type de fonction IsFileLocked() ne peut jamais fonctionner de manière fiable sur un système d'exploitation multitâche. La valeur renvoyée est instantanément périmée et ne garantit pas qu'elle est toujours déverrouillée lorsque vous essayez d'accéder au fichier. Vous découvrez en accédant au fichier, c'est atomique. Ce n'est pas inefficace, seulement ce que vous faites quand il est verrouillé pourrait l'être. Ce qui est exactement la même chose que si une hypothétique fonction IsFileLocked() renvoyait TRUE. Evitez tout cela en empêchant un autre processus de verrouiller le fichier lorsque vous l'ouvrez. –