E/S de base sur fichier
La classe abstraite de base Stream prend en charge la lecture et l'écriture d'octets. La classe Stream intègre la prise en charge asynchrone. Ses implémentations par défaut définissent les opérations de lecture et d'écriture synchrones dans la limite des méthodes asynchrones correspondantes, et inversement.
Toutes les classes qui représentent des flux héritent de la classe Stream. La classe Stream et ses classes dérivées donnent une vue générique des sources de données et des référentiels, isolant ainsi le programmeur des détails propres au système d'exploitation et aux périphériques sous-jacents.
Les flux impliquent trois opérations fondamentales :
- Il est possible de lire les flux. La lecture est le transfert de données d'un flux vers une structure de données tel qu'un tableau d'octets.
- Il est possible d'écrire les flux. L'écriture désigne le transfert de données d'une source de données vers un flux.
- Les flux peuvent prendre en charge la recherche. La recherche consiste à envoyer une requête concernant la position actuelle dans un flux et à modifier cette dernière.
Selon la source de données sous-jacente ou le référentiel, les flux peuvent prendre en charge certaines de ces fonctionnalités. Par exemple, NetworkStreams ne prend pas en charge la recherche. Les propriétés CanRead, CanWrite et CanSeek de Stream et de ses classes dérivées déterminent les opérations prises en charge par les différents flux.
Classes utilisées pour les E/S de fichier
FileObject fournit une représentation de fichier texte. Utilisez la classe FileObject pour effectuer les opérations de fichier texte les plus courantes, telles que la lecture, l'écriture, l'ajout, la copie, la suppression, le déplacement et l'affectation d'un nouveau nom. Vous pouvez également utiliser FileObject pour examiner et, dans certains cas, définir les attributs de fichiers, l'encodage et des informations sur le chemin d'accès.
La classe Directory fournit des méthodes static pour la création, le déplacement et l'énumération dans les répertoires et les sous-répertoires. La classe DirectoryInfo fournit des méthodes d'instance.
La classe DirectoryInfo fournit des méthodes d'instance pour la création, le déplacement et l'énumération dans les répertoires et les sous-répertoires. La classe Directory fournit des méthodes static.
File fournit des méthodes static pour créer, copier, supprimer, déplacer et ouvrir des fichiers et facilite la création de FileStream. La classe FileInfo fournit des méthodes d'instance.
FileInfo fournit des méthodes d'instance pour créer, copier, supprimer, déplacer et ouvrir des fichiers, et facilite la création de FileStream. La classe File fournit des méthodes static.
La classe FileStream prend en charge l'accès aléatoire aux fichiers via la méthode Seek. Par défaut, FileStream ouvre les fichiers de façon synchrone, mais cette classe prend également en charge les opérations asynchrones. File contient des méthodes static et FileInfo des méthodes d'instance.
FileSystemInfo est la classe abstraite de base de FileInfo et DirectoryInfo.
La classe Path fournit des méthodes et des propriétés pour le traitement des chaînes de répertoire entre plates-formes.
File, FileInfo, Path, Directory et DirectoryInfo sont des classes sealed (en Microsoft Visual Basic, NotInheritable). Vous pouvez créer de nouvelles instances de ces classes, mais elles ne peuvent pas avoir de classes dérivées.
Classes utilisées pour lire et écrire dans des flux
Les classes BinaryReader et BinaryWriter lisent les chaînes codées et les types de données primitifs à partir de Streams ou les y écrivent.
StreamReader lit les caractères à partir de Streams, en utilisant Encoding pour convertir les caractères en octets et inversement. StreamReader possède un constructeur qui vérifie quel est l'Encoding correct d'un Stream donné, à partir de la présence d'un preamble spécifique à l'Encoding, tel qu'une marque d'ordre d'octet.
StreamWriter écrit des caractères dans Streams, en utilisant Encoding pour les convertir en octets.
StringReader lit les caractères à partir de Strings. Comme StringReader permet de traiter Strings avec la même API, votre sortie peut être un Stream, dans quelque codage que ce soit, ou une String.
StringWriter écrit les caractères dans Strings. Comme StringWriter permet de traiter Strings avec la même API, votre sortie peut être un Stream, dans quelque codage que ce soit, ou une String.
TextReader est la classe abstraite de base de StreamReader et StringReader. Alors que les implémentations de la classe abstraite Stream sont destinées aux entrées et sorties d'octets, celles de TextReader sont conçues pour les sorties de caractères Unicode.
TextWriter est la classe abstraite de base de StreamWriter et StringWriter. Alors que les implémentations de la classe abstraite Stream sont destinées aux entrées et sorties d'octets, celles de TextWriter sont conçues pour les entrées de caractères Unicode.
Classes Stream d'E/S courantes
La classe BufferedStream est une classe Stream qui ajoute la mise en mémoire tampon à une autre classe Stream telle que NetworkStream. (FileStream possède déjà de façon interne la mise en mémoire tampon et MemoryStream ne nécessite pas de mise en mémoire tampon). BufferedStream peut être composé à partir de certains types de flux pour améliorer les performances de lecture et d'écriture. Une mémoire tampon est un bloc d'octets en mémoire, utilisé pour mettre des données en cache, afin de réduire le nombre d'appels adressés au système d'exploitation.
La classe CryptoStream lie les flux de données aux transformations cryptographiques. Bien que CryptoStream dérive de Stream, il ne fait pas partie de l'espace de noms System.IO mais de l'espace de noms System.Security.Cryptography.
La classe MemoryStream est un flux non mis en mémoire tampon et dont les données encapsulées sont directement accessibles en mémoire. Ce flux n'a pas de magasin de sauvegarde et peut servir de mémoire tampon temporaire.
La classe NetworkStream représente une classe Stream sur une connexion réseau. Bien que la classe NetworkStream dérive de Stream, elle ne fait pas partie de l'espace de noms System.IO mais de l'espace de noms System.Net.Sockets.
E/S et sécurité
Lors de l'utilisation des classes de l'espace de noms System.IO, il est nécessaire que les spécifications de sécurité du système d'exploitation, comme les listes de contrôle d'accès (ACL), soient appliquées pour que l'accès soit possible. Ces spécifications s'ajoutent aux spécifications FileIOPermission existantes.
ATTENTION La stratégie de sécurité par défaut d'Internet et d'un intranet n'autorise pas l'accès aux fichiers. En conséquence, n'utilisez pas les classes d'E/S de stockage non isolé régulières si vous écrivez du code qui doit être téléchargé sur Internet. Utilisez à la place le Stockage isolé.
ATTENTION Lors de l'ouverture d'un fichier ou d'un flux de réseau, le contrôle de sécurité n'a lieu que lorsque le flux est construit. En conséquence, soyez vigilants lorsque vous transmettez ces flux à un domaine d'application ou un code d'un niveau de confiance moindre.
Voir aussi
Création d'un listage de répertoire | Lecture et écriture d'un nouveau fichier de données | Ouverture d'un fichier journal et ajouts à ce fichier | Lecture de texte à partir d'un fichier | Écriture de texte dans un fichier | Lecture de caractères à partir d'une chaîne | Écriture de caractères dans une chaîne