52 votes

System.IO.File.Create verrouiller un fichier

Tout comme la question dit... je suis en utilisant le Système.IO.Fichier.Créer pour créer un fichier. Je ne suis pas d'écrire avec un flux écrivain, juste de la créer.

J'obtiens une erreur de serveur dans l'avant lorsque l'application essaye d'ouvrir le fichier nouvellement créé - vous que le fichier est en cours d'utilisation. La collecte des ordures semble alors venir le long et quelques minutes plus tard, tout est OK.

Maintenant, je sais si j'ai été en utilisant Streamwriter je dois le fermer. Fait la même chose s'applique à la création?

J'ai lu que l'ouverture d'un flux d'écrivain pour le fichier, puis immédiatement à la fermeture, il va résoudre ce problème, mais il semble en désordre. Est-il un moyen plus simple?

Merci!

102voto

joe Points 301

Essaye ça:

 System.IO.File.Create(FullFName).Close();
 

74voto

Edwin de Koning Points 7955

File.Create renvoie un FileStream . Vous devriez l'utiliser comme ça:

 using (FileStream fs = File.Create(path))
{
    //you can use the filstream here to put stuff in the file if you want to
}
 

12voto

Oded Points 271275

La création du fichier lui ouvre un FileStream , par conséquent, le verrouiller ( File.Create renvoie le FileStream ).

Vous devez fermer ce flux pour pouvoir accéder au fichier. Ceci est mieux fait avec une déclaration using :

 using(FileStream fs = File.Create(path))
{
}
 

8voto

Kev Points 60744

Lors de l'utilisation d' File.Create , vous obtenez un FileStream retournée. Jusqu'à ce que vous fermer le flux de données ou jusqu'à ce que l' FileStream objet est éliminé (par le garbage collector finaliser), il restera ouvert et verrouillé.

FileStream implémente IDisposable de sorte que vous pouvez effectuer les opérations suivantes:

using(FileStream fs = File.Create(filename))
{
    // Do stuff like write to the file
}

L' using déclaration est "sucre syntaxique" et le compilateur génère le code qui est fonctionnellement équivalent à:

FileStream fs = File.Create(filename)
try
{
    // Do stuff like write to the file
}
finally
{
    fs.Dispose();
}

L' Dispose des appels de méthode Close en interne.

1voto

malay Points 764

La méthode Create renverra un descripteur de fichier. Le descripteur de fichier doit être fermé avant de réutiliser le fichier. S'il vous plaît voir les détails dans le lien msdn . Résumé - "L'objet FileStream créé par cette méthode a une valeur FileShare par défaut de None; aucun autre processus ou code ne peut accéder au fichier créé tant que le descripteur de fichier d'origine n'est pas fermé."

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X