Est-ce que cette syntaxe
FileStream fs = new FileStream(strFilePath, FileMode.Create);
la même chose que ça?
FileStream fs = File.Create(strFilePath);
Quand oui, lequel est le meilleur?
Selon JustDecompile, c’est important, parce que File.Create
appelle finalement:
new FileStream(path,
FileMode.Create,
FileAccess.ReadWrite,
FileShare.None,
bufferSize,
options);
Avec une bufferSize
de 4096 (valeur par défaut) et un FileOptions.None
(identique à celui du constructeur FileStream), l'indicateur FileShare
est différent: le constructeur FileStream crée le flux avec FileShare.Read
.
Je dis donc: optez pour la lisibilité et utilisez File.Create(string)
si vous ne vous souciez pas des autres options.
A mon avis, j'utilise celui-ci:
using (FileStream fs = new FileStream(strFilePath, FileMode.Create))
{
fs.Write("anything");
fs.Flush();
}
Ils font essentiellement la même chose, mais celui-ci crée le fichier et l’ouvre en mode création/écriture, et vous pouvez définir la taille de la mémoire tampon et tous les paramètres.
new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize, options);
Avec File.Create, cela encapsule tous ces paramètres et tampons par défaut. Vous aurez une bien meilleure flexibilité et une meilleure gestion avec mon nouveau FileStream (strFilePath, FileMode.Create); si vous voulez plus de lisibilité ou d’options de gestion!
La seconde utilise simplement un autre FileMode pour le flux: jetez un coup d'œil à cet article
http://msdn.Microsoft.com/en-us/library/47ek66wy.aspx
gérer les valeurs par défaut de cette méthode!
Mais utilisez une instruction using
, ainsi toutes les ressources seront libérées de la bonne manière!
using (FileStream fs = new FileStream(strFilePath, FileMode.Create))
{
// HERE WHAT YOU WANT TO DO!
}
Ils font exactement la même chose. La seule différence réelle est que le premier vous laisserait utiliser un FileMode différent au moment de l'exécution si vous le souhaitiez (en le contrôlant avec une variable) et que le second ne ferait que créer une opération.
En remarque, la convention est de gérer des choses comme un flux de fichiers dans un bloc using pour les éliminer automatiquement quand ils sont hors de portée.
using (var fs = new FileStream(strFilePath, FileMode.Create))
{
//do some stuff
}
Avec le premier, vous avez plus d'options à faire comme: handle, accès au fichier, mode de fichier, taille de la mémoire tampon int, .... mais avec le second, vous avez moins d'options à faire.
Le premier crée ou écrase le fichier avec le partage de l'accès en lecture en second lieu avec Aucun. Cela dépend donc de ce que vous souhaitez autoriser ou non à autoriser l'accès pendant le traitement du fichier.