web-dev-qa-db-fra.com

Quelle est la différence entre File et FileInfo en C #?

Je lis que les méthodes statiques de la Fichier Les classes sont mieux utilisées pour effectuer de petites tâches et peu de tâches sur un fichier. FileInfo Classe si nous allons effectuer de nombreuses opérations sur un fichier spécifique. 

Je comprends cela et je peux simplement l'utiliser aveuglément, mais j'aimerais savoir pourquoi il y a une différence? Qu'est-ce qui rend leur travail adapté à différentes situations? Quel est l'intérêt d'avoir ces 2 classes différentes qui semblent faire la même chose de manière différente?

Il serait utile que quelqu'un puisse répondre à au moins une de ces questions.

63
bluediapente

Généralement, si vous effectuez une seule opération sur un fichier, utilisez la classe File. Si vous effectuez plusieurs opérations sur le même fichier, utilisez FileInfo.

Cela s'explique par la vérification de la sécurité effectuée lors de l'accès à un fichier. Lorsque vous créez une instance de FileInfo, la vérification est effectuée une seule fois. Cependant, chaque fois que vous utilisez une méthode statique File, le contrôle est effectué.

76
John Rasch

"Les méthodes des classes File et FileInfo sont similaires, mais elles diffèrent par le fait que les méthodes de la classe File sont static. Vous devez donc passer plus de paramètres que pour les méthodes de l'occurrence FileInfo. pour ce faire, car elle fonctionne sur un fichier spécifique, par exemple, la méthode FileInfo.CopyTo () prend un paramètre pour le chemin de destination utilisé pour copier le fichier, alors que la méthode File.Copy () prend deux paramètres pour le chemin source. et le chemin de destination. "

http://www.aspfree.com/c/a/C-Sharp/A-Look-at-C-Sharp-File-and-FileInfo-Classes/1/

http://www.intelliott.com/blog/PermaLink,guid,ce9edbdb-6484-47cd-a5d6-63335adae02b.aspx

6
madcolor

File.Exists fonctionnera beaucoup plus rapidement qu'un nouveau FileInfo (filePath) .Exists - en particulier sur un réseau et à condition que les fichiers existent réellement. En effet, File.Exists vérifie uniquement l'existence du fichier, alors qu'un nouveau FileInfo (filePath) .Exists construit d'abord un objet FileInfo, qui contient toutes les propriétés (dates, taille, etc.) du fichier (s'il existe).

D'après mon expérience, même vérifier l'existence de 10 fichiers sur le réseau est nettement plus rapide (c'est-à-dire 20 ms par rapport à 200 ms) grâce à File.Exists.

5
Nick Wallace

Le fichier est optimisé pour des opérations uniques sur un fichier, FileInfo est optimisé autour de plusieurs opérations sur le même fichier, mais en général, il n'y a pas beaucoup de différence entre les différentes implémentations de méthodes.

Si vous souhaitez comparer les implémentations exactes, utilisez Reflector pour examiner les deux classes.

3
Franci Penov

Un FileInfo peut être nécessaire pour gérer les propriétés de contrôle d'accès. Pour le reste, il s'agit d'un choix entre Statique et Instance et vous pouvez choisir ce qui convient.

3
Henk Holterman

Oui, et l'une des raisons pourrait être, comme l'a dit Nag, que Files soit une classe d'utilitaires et qu'aucune instance ne doit être créée. En même temps, en tant que fichier utilitaire, la vérification de la sécurité est requise à chaque fois.

D'autre part, FileInfo nécessite la création d'une instance et ce point utilise un contrôle de sécurité. Ainsi, l'exécution de plusieurs opérations à l'aide de FileInfo n'appelle pas de contrôle de sécurité.

2
div

FileInfo est une instance d'un fichier représentant ainsi le fichier lui-même. Le fichier est une classe utilitaire, donc peut fonctionner avec n'importe quel fichier

1
Nag

Récemment, j'ai eu un problème avec File.Exist, je déteste cette fonction. Après que j’ai utilisé la fonction Fileinfo class Exist, mon programme fonctionne correctement. 

En réalité, ce qui se passe dans l'environnement de développement File.Exist fonctionne bien, mais lorsqu'il passe en environnement réel, cette fonction bloque l'objet fichier pour cette raison, l'accès à l'erreur est refusé et je ne peux pas utiliser le fichier. 

C’est mon apprentissage… .. Je n’utiliserai jamais la méthode File.Exist, le mieux serait de créer l’objet puis de l’utiliser. Soyez conscient d'utiliser des méthodes statiques.

1
brijesh

FileInfo:

  • Besoin d'instancier avant d'utiliser
  • Contient des méthodes d'instance
  • Cache Information sur le fichier et vous devez appeler Actualiser à chaque fois pour obtenir les dernières informations sur le fichier.

Fichier:

  • Pas besoin d'instancier
  • Contient des méthodes statiques
  • Ne mettez pas en cache, vous obtenez donc les dernières informations chaque fois que vous les utilisez. 

src:

0
DragneelFPS