web-dev-qa-db-fra.com

FileStream Create

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?

9
user609511

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.

11
CodeCaster

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!

7
TrizZz

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!
}
2
MAXE

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
}
1
PhonicUK

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. 

0

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.

0
Reniuz