FileStream dans l'utilisation
Si mon fichier de flux est en cours d'utilisation (chaque fois que j'essaye de débogage, il cogne la première ligne et dit qu'elle est en cours d'utilisation), comment puis-je la force d'une libération? chaque fois qu'elle frappe ce code, j'obtiens un message me disant que quelque chose est en l'utilisant:
FileStream fileStream = File.Open(@"C:\somefile", FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[fileStream.Length];
...etc.
fileStream.Close();
Qu'est-ce que le fichier en cours d'utilisation?
OriginalL'auteur PositiveGuy | 2010-02-15
Vous devez vous connecter pour publier un commentaire.
Apprendre à utiliser
à l'aide de
:La
using
construire assure que le dossier sera fermé lorsque vous quittez le bloc, même si une exception est levée.Votre problème est peut-être pas ici, mais ailleurs dans votre code. Vous aurez à passer par tous de votre code et de chercher des endroits où vous avez ouvert les fichiers, mais pas de le mettre à l'intérieur d'un
using
déclaration.OriginalL'auteur Mark Byers
Pensez également à utiliser
ou
Si vous voulez simplement lire le contenu du fichier et il n'est pas trop gros.
OriginalL'auteur Manu
La suggestion d'utiliser les
using
déclaration est un bon; mais il n'est pas votre seul choix. Elle tend simplement à être préféré par les développeurs pour son point de vue syntaxique "propre" look et la facilité d'utilisation.La principale chose (et ce
using
s'assure de toujours pour vous) est de s'assurer que vous appelezFileStream.Close
n'importe quoi. Si vous frappez une exception, ce code peut être manqué. Donc, à tout le moins de mettre votre appel àClose
dans unfinally
bloc.Personnellement, si je suis en train d'écrire toute erreur de manipulation de moi-même, je préfère
try
/catch
/finally
àtry
/using
/catch
. Dans un autre scénario, je beaucoup préférez l'utilisation definally
est là que je travaille avec plusieursIDisposable
objets, et je veux éviter de profondeur d'imbrication. Considérons le code suivant:Maintenant, comparez cela à cela:
Personnellement, je trouve que celle-ci soit beaucoup plus lisible.
Évidemment, c'est une question de préférence personnelle. Ci-dessus deux exemples de code pour obtenir le même résultat.
Oui -- de même que de la mettre dans un
finally
bloc (ce qui garantit que tout ce qui est à l'intérieur de lafinally
fonctionnera même si une erreur a été jeté quelque part dans letry
). Je l'utilise généralementusing
si je ne suis pas le contraire de la manipulation des erreurs moi-même; si je veux attraper une exception, même si (à l'aide decatch
), je trouve ça plus propre d'utilisertry
/catch
/finally
quetry
/using
/catch
- principalement parce que celle-ci implique un niveau supplémentaire de nidification (purement une question de préférence personnelle, bien sûr).OriginalL'auteur Dan Tao
à l'aide de
using
est la bonne approche.Vous pouvez également spécifier le partage de fichiers.readwrite option pour ouvrir le fichier sans le verrouiller.
OriginalL'auteur Paul Creasey