Classe System.IO.FileStream
Cet article vous offre des remarques complémentaires à la documentation de référence pour cette API.
Utilisez la FileStream classe pour lire, écrire, ouvrir et fermer des fichiers sur un système de fichiers et manipuler d’autres handles de système d’exploitation liés aux fichiers, notamment les canaux, les entrées standard et la sortie standard. Vous pouvez utiliser les méthodes , et FlushCopyToWriteles Readméthodes pour effectuer des opérations synchrones, ou les ReadAsync, WriteAsyncet CopyToAsyncFlushAsync les méthodes pour effectuer des opérations asynchrones. Utilisez les méthodes asynchrones pour effectuer des opérations de fichier gourmandes en ressources sans bloquer le thread principal. Cette considération de performance est particulièrement importante dans une application Windows 8.x Store ou une application de bureau où une longue opération de flux peut bloquer le thread d'interface utilisateur et faire que l'application s'affiche comme si elle ne fonctionnait pas. FileStream met en mémoire tampon les entrées et sorties pour de meilleures performances.
Important
Ce type implémente l'interface IDisposable. Une fois que vous avez fini d’utiliser le type, vous devez le supprimer directement ou indirectement. Pour supprimer directement le type Dispose, appelez sa méthode dans un bloc try
/catch
. Pour la supprimer indirectement, utilisez une construction de langage telle que using
(dans C#) ou Using
(dans Visual Basic). Pour plus d’informations, consultez la section « Utilisation d’un objet qui implémente IDisposable » dans la rubrique de l’interface IDisposable.
La IsAsync propriété détecte si le handle de fichier a été ouvert de manière asynchrone. Vous spécifiez cette valeur lorsque vous créez une instance de la classe à l’aide FileStream d’un constructeur qui a un isAsync
, useAsync
ou options
un paramètre. Lorsque la propriété est true
, le flux utilise des E/S superposées pour effectuer des opérations de fichier de manière asynchrone. Toutefois, la IsAsync propriété n’a pas besoin d’appeler true
le ReadAsync, WriteAsyncou CopyToAsync la méthode. Lorsque la IsAsync propriété est false
et que vous appelez les opérations de lecture et d’écriture asynchrones, le thread d’interface utilisateur n’est toujours pas bloqué, mais l’opération d’E/S réelle est effectuée de manière synchrone.
La Seek méthode prend en charge l’accès aléatoire aux fichiers. Seek permet de déplacer la position en lecture/écriture vers n’importe quelle position dans le fichier. Cette opération s’effectue avec les paramètres de point de référence de décalage d’octet. Le décalage d’octet est relatif au point de référence de recherche, qui peut être le début, la position actuelle ou la fin du fichier sous-jacent, comme représenté par les trois membres de l’énumération SeekOrigin .
Remarque
Les fichiers de disque prennent toujours en charge l’accès aléatoire. Au moment de la construction, la valeur de propriété CanSeek est définie true
sur ou false
en fonction du type de fichier sous-jacent. Si le type de fichier sous-jacent est FILE_TYPE_DISK, tel que défini dans winbase.h, la valeur de la CanSeek propriété est true
. Sinon, la valeur de la CanSeek propriété est false
.
Si un processus se termine par une partie d’un fichier verrouillé ou ferme un fichier qui a des verrous en attente, le comportement n’est pas défini.
Pour les opérations d’annuaire et d’autres opérations de fichier, consultez les classes Directoryet Path les Fileclasses. La File classe est une classe utilitaire qui a des méthodes statiques principalement pour la création d’objets basés sur des chemins de FileStream fichier. La MemoryStream classe crée un flux à partir d’un tableau d’octets et est similaire à la FileStream classe.
Pour obtenir la liste des opérations courantes de fichiers et de répertoires, consultez Tâches d’E/S courantes.
Détection des modifications de position de flux
Lorsqu’un FileStream objet n’a pas de conservation exclusive sur son handle, un autre thread peut accéder simultanément au handle de fichier et modifier la position du pointeur de fichier du système d’exploitation associé au handle de fichier. Dans ce cas, la position mise en cache dans l’objet FileStream et les données mises en cache dans la mémoire tampon peuvent être compromises. L’objet FileStream effectue régulièrement des case activée sur les méthodes qui accèdent à la mémoire tampon mise en cache pour s’assurer que la position de handle du système d’exploitation est identique à la position mise en cache utilisée par l’objetFileStream.
Si une modification inattendue de la position de handle est détectée dans un appel à la Read méthode, .NET dis carte le contenu de la mémoire tampon et lit à nouveau le flux à partir du fichier. Cela peut affecter les performances, en fonction de la taille du fichier et des autres processus susceptibles d’affecter la position du flux de fichiers.
Si une modification inattendue de la position de handle est détectée dans un appel à la Write méthode, le contenu de la mémoire tampon est dis carte ed et une IOException exception est levée.
Un FileStream objet n’aura pas de conservation exclusive sur son handle lorsque la SafeFileHandle propriété est accessible pour exposer le handle ou que l’objet FileStream reçoit la SafeFileHandle propriété dans son constructeur.