Windows: écraser le fichier utilisé

J’essaie d’écrire un utilitaire qui permettra de déplacer des fichiers dans Windows, et lorsqu’il trouvera un fichier en cours d’utilisation, définira ce fichier à déplacer au redémarrage.

Il semble que MoveFileEx ( http://msdn.microsoft.com/en-us/library/aa365240(VS.85).aspx ) soit le bon appel pour cela, mais je ne peux pas comprendre quel code d’erreur je cherche de GetLastError ( http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx ) pour voir que le fichier était en cours d’utilisation.

Je veux que l’utilitaire échoue lorsqu’il y a un problème de permissions réel. Y a-t-il un moyen de différencier une erreur d’écriture rémanente et une erreur d’écrasement en cours d’utilisation?

De plus, si je dispose des fichiers que je déplace dans le dossier temporaire de l’utilisateur, seront-ils supprimés avant le renommage différé?

Vous devez d’abord appeler CreateFile pour voir si le fichier est utilisé.

Pour voir si le fichier est utilisé:

Si vous obtenez un descripteur de fichier valide, vous savez que le fichier n’a pas d’permissions de partage en conflit avec un processus qui a déjà ce fichier ouvert.

Si vous ne spécifiez aucun access de partage (0 au paramètre dwShareMode de l’appel CreateFile), vous n’obtiendrez pas de descripteur de fichier si un autre processus utilise actuellement ce fichier. GetLastError dans ce cas renverrait: ERROR_SHARING_VIOLATION (32)


Pour voir s’il y a un problème de sécurité avec l’access au fichier:

Pour voir s’il y a un problème d’access à ce fichier, l’appel CreateFile échouera également mais avec un GetLastError différent. Vous obtiendrez: ERROR_ACCESS_DENIED (5)