Je dois vérifier si des fichiers d'un dossier sont ouverts par d'autres applications ou non. Malheureusement, si un fichier est ouvert, GetFileAttributesA() renvoie des valeurs incorrectes. Y at-il une solution de contournement pour cela ou est-ce que je fais quelque chose de mal?Comment vérifier si un fichier est ouvert
1
A
Répondre
1
GetFileAttributes
n'a rien à voir avec le partage de fichiers. La seule façon de savoir si quelqu'un a ouvert le fichier (vous empêchant ainsi de l'ouvrir) est d'essayer de l'ouvrir vous-même.
bool IsFileOpenBySomeoneElse(LPCTSTR pszFilename)
{
HANDLE hfile = CreateFile(pszFilename,
GENERIC_READ /*| GENERIC_WRITE*/,
0, //0 is share-none
NULL,
OPEN_ALWAYS);
if (hfile != INVALID_HANDLE_VALUE)
{
CloseHandle(hfile);
return false;
}
return (GetLastError() == ERROR_SHARING_VIOLATION);
}
Mais écrire cette fonction ne vous pas, parce que le temps que vous vous déplacer à l'ouverture e fichier e pour le traitement, une autre application peut avoir le fichier ouvert.
Le seul moyen sûr de faire cela est de faire ce que vous avez l'intention de faire avec le fichier, et lorsque vous essayez de l'ouvrir pour le traitement, notez la valeur de l'erreur si vous échouez. Une fois que vous avez le fichier ouvert, vous devez le garder ouvert jusqu'à ce que vous avez terminé ou un autre processus peut l'ouvrir (ou le supprimer!) Derrière votre dos.
Questions connexes
- 1. Comment vérifier si un fichier est déjà ouvert en COBOL?
- 2. Comment vérifier si votre document est ouvert dans un IFrame?
- 3. Vérifiez si un fichier est ouvert
- 4. Est-il possible de vérifier si un flux de fichier est ouvert dans Rails?
- 5. Détection si un fichier est déjà ouvert en javascript/hta
- 6. Comment vérifier si le fichier téléchargé est un fichier binaire?
- 7. Vérifier si un fichier est ouvert à partir d'un autre processus
- 8. comment vérifier si le fichier est php?
- 9. Comment vérifier si le fichier est binaire?
- 10. Comment vérifier si un dossier ou un fichier est masqué =
- 11. Ruby - Voir si un port est ouvert
- 12. Comment vérifier si un fichier Windows est lisible/inscriptible?
- 13. comment vérifier si un fichier est sélectionné avec javascript?
- 14. Comment vérifier si un objet est une instance de 'fichier'?
- 15. C#: Comment vérifier si un fichier ouvert a été mis à jour
- 16. Comment vérifier si un fichier existe dans un fichier makefile
- 17. Comment vérifier si un fichier existe dans un fichier war?
- 18. Vérifier si le fichier est signé
- 19. Comment identifier si le dossier est ouvert?
- 20. façon mutualisées de vérifier si un fichier est un répertoire
- 21. Vérifier si un flux est un fichier zip
- 22. Comment vérifier si un pointeur est valide?
- 23. Comment vérifier si un objet est nul
- 24. Comment vérifier si un objet est nul
- 25. Comment vérifier si un menu est affiché
- 26. Comment vérifier si un objet est défini?
- 27. Comment vérifier si FileObject est un dossier?
- 28. Comment vérifier si un bouton est cliqué?
- 29. Comment vérifier si un BOOL est nul?
- 30. Comment savoir si un certain fichier Excel est ouvert avec VB.NET?
Je suis d'accord avec le "share-none". Je ne suis pas d'accord avec le "GENERIC_READ | GENERIC_WRITE". Si CreateFile échoue parce que l'utilisateur n'a que l'autorisation de lecture ET que le fichier est également ouvert par quelqu'un d'autre, comment savez-vous si GetLastError donnera la priorité à ERROR_SHARING_VIOLATION? –
@Windows Programmeur: bon point. mais si vous avez besoin d'un accès en écriture, vous en souciez-vous? Je suppose que cela dépend de la raison pour laquelle vous appelez cette fonction. –
Pourquoi supposez-vous que Krishna a besoin d'un accès en écriture? La question ne l'a pas dit. –