Existe-t-il un moyen de savoir si un fichier est déjà ouvert ou non?Vérifiez si un fichier est ouvert
Répondre
protected virtual bool IsFileinUse(FileInfo file)
{
FileStream stream = null;
try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null)
stream.Close();
}
return false;
}
Si le processus n'a pas accès en écriture au fichier, cela produira un résultat trompeur (l'ouverture échouera, mais pas nécessairement parce qu'une poignée existe). L'ouverture pour l'accès en lecture serait moins sujette aux erreurs. – hemp
Incroyable que la plupart des langues n'ont pas une méthode pour tester le fichier est ouvert. Nous utilisions le même type de méthode sous C++ dans OS/2. c'est-à-dire essayer d'ouvrir le fichier exclusif. Cela fonctionne assez bien, mais je ne l'ai jamais trouvé élégant. – Matt
Ce n'est pas une fonctionnalité de langue, c'est une fonctionnalité du système d'exploitation. Il n'existe tout simplement pas d'API simple (sous Windows) pour interroger cette information. Il est possible d'obtenir, mais c'est de bas niveau et il y a beaucoup de paramètres qui devraient être spécifiés pour savoir ce que l'on entend par "ouvert". – hemp
Comme @pranay rana, mais nous devons nous assurer que nous fermons notre poignée de fichier:
public bool IsFileInUse(string path)
{
if (string.IsNullOrEmpty(path))
throw new ArgumentException("'path' cannot be null or empty.", "path");
try {
using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read)) { }
} catch (IOException) {
return true;
}
return false;
}
Identique à @pranay rana, j'ai testé cette méthode, mais elle ne détecte pas quand le fichier est ouvert dans Notepad . – James
Si vous voulez dire que vous voulez vérifier si un fichier est ouvert avant d'essayer de l'ouvrir , alors non. (Du moins pas sans passer au niveau bas et examiner chaque poignée de fichier qui est ouverte dans le système.)
En outre, l'information serait ancienne quand vous l'aurez. Même si le test retourne que le fichier n'est pas ouvert, il aurait pu être ouvert avant que vous ayez une chance d'utiliser la valeur de retour. Par conséquent, la meilleure façon de gérer la situation est d'essayer d'ouvrir le fichier et de gérer toute erreur pouvant survenir.
D'accord. Je voudrais créer une classe désignée qui enveloppe la logique de fichier ouvert ou au moins le test (IsFileAvailable). Cela vous permettra de placer la gestion des exceptions avec une classe spécifiquement responsable et de la rendre réutilisable. Vous pouvez même appliquer d'autres logiques, telles que tester la taille du fichier pour voir si le fichier est en cours d'écriture dans etc, pour donner une réponse plus détaillée. Cela rendra également votre code de consommation beaucoup plus propre.
- 1. Vérifiez si le programme shell est ouvert
- 2. Comment vérifier si un fichier est ouvert
- 3. Vérifiez fichier Excel est ouvert par un autre utilisateur
- 4. Vérifiez si un fichier est une image
- 5. Vérifiez si le sélecteur de date est ouvert
- 6. Comment vérifier si un fichier est déjà ouvert en COBOL?
- 7. Détection si un fichier est déjà ouvert en javascript/hta
- 8. Vérifiez si une chaîne particulière est dans un fichier bash
- 9. Vérifiez si un fichier PDF est corrompu avec PHP
- 10. Vérifiez si un fichier texte existe
- 11. Vérifiez si le fichier existe
- 12. Ruby - Voir si un port est ouvert
- 13. Vérifiez si une variable est un tableau
- 14. Vérifiez si l'utilisateur est connecté
- 15. Vérifiez si UIView est touché?
- 16. Vérifiez si l'adresse mmapée est correcte
- 17. Python: Vérifiez si le fichier téléchargé est jpg
- 18. Vérifiez si ftp est complet ou non?
- 19. PHP - Vérifiez si un fichier existe dans un dossier
- 20. Vérifiez si le fichier existe ou non?
- 21. Vérifiez si le port client est ouvert et transmis [C#, ASP.NET]
- 22. Vérifiez si le fichier distant existe
- 23. jQuery: Vérifiez si un élément est affecté à un var
- 24. Vérifiez si un objet dans un tableau 2d est nul
- 25. Est-il possible de vérifier si un flux de fichier est ouvert dans Rails?
- 26. Vérifiez si le dossier est utilisé en C#
- 27. PHP Vérifiez si quelqu'un a choisi un fichier
- 28. Vérifiez si un fichier texte existe dans ASP.NET
- 29. Vérifiez si une ligne spécifique existe dans un fichier?
- 30. RewriteCond Vérifiez si le fichier existe dans un sous-répertoire
S'il vous plaît offrir plus de détails. Déjà ouvert par votre processus, ou un autre processus? Période ouverte, ou juste ouvert avec un accès en écriture? Qu'en est-il du partage? etc. Cette question est trop vague. – hemp