Fichier et flux de données E/S

E/S de fichier et de flux (entrées/sorties) fait référence au transfert de données vers ou depuis un support de stockage. Dans .NET, les espaces de noms System.IO contiennent des types qui permettent la lecture et l'écriture, de façon synchrone ou asynchrone, sur les flux de données et les fichiers. Ces espaces de noms contiennent également les types qui exécutent la compression et la décompression sur les fichiers, et ceux qui permettent la communication via des canaux et des ports série.

Un fichier est une collection ordonnée et nommée d'octets ayant un stockage persistant. Lorsque vous travaillez sur des fichiers, vous manipulez des chemins d'accès aux répertoires, du stockage disque et des noms de fichiers et de répertoires. En revanche, un flux est une séquence d'octets que vous pouvez lire et écrire dans un magasin de stockage, qui peut être l'un des nombreux supports de stockage (par exemple, des disques ou de la mémoire). De même qu'il existe d'autres magasins de stockage que les disques, il existe d'autres flux que les flux de fichiers, tels que les flux de réseau, de mémoire et de canaux.

Fichiers et répertoires

Utilisez les types de l'espace de noms System.IO pour interagir avec les fichiers et les répertoires. Par exemple, obtenez et définissez les propriétés des fichiers et des répertoires, et extrayez les collections de fichiers et de répertoires en fonction de critères de recherche.

Pour les conventions d’affectation de noms des chemins et les nouvelles méthodes pour exprimer un chemin de fichier pour les systèmes Windows, notamment avec la syntaxe des appareils DOS prise en charge dans .NET Core 1.1 et ultérieur et .NET Framework 4.6.2 et ultérieur, consultez Formats de chemin de fichier sur les systèmes Windows.

Voici quelques classes de fichiers et de répertoires couramment utilisées :

  • File fournit des méthodes statiques pour la création, la copie, la suppression, le déplacement et l'ouverture de fichiers et permet de créer un objet FileStream.

  • FileInfo fournit des méthodes d'instance pour la création, la copie, la suppression, le déplacement et l'ouverture de fichiers et permet de créer un objet FileStream.

  • Directory fournit des méthodes statiques pour la création, le déplacement et l'énumération dans les répertoires et les sous-répertoires.

  • 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.

  • Path fournit des méthodes et des propriétés pour le traitement des chaînes de répertoire entre plateformes.

Vous devez toujours fournir une gestion des exceptions robuste lors de l’appel des méthodes de système de fichiers. Pour plus d’informations, consultez Gestion des erreurs E/S.

En plus d'utiliser ces classes, les utilisateurs de Visual Basic peuvent utiliser les méthodes et les propriétés fournies par la classe Microsoft.VisualBasic.FileIO.FileSystem pour l'E/S de fichier.

Voir Comment : copier des répertoires, Comment : créer une liste de répertoires et Comment : énumérer des répertoires et des fichiers.

Flux

La classe abstraite de base Stream prend en charge la lecture et l'écriture d'octets. 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 globale 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 :

  • Lecture : transfert de données d'un flux vers une structure de données tel qu'un tableau d'octets.

  • Écriture : transfert de données d'une source de données dans un flux.

  • Recherche : envoi d'une requête concernant la position actuelle dans un flux et modification de cette dernière.

Selon la source de données sous-jacente ou le référentiel, un flux peut prendre en charge certaines de ces capacités. Par exemple, la classe PipeStream ne prend pas en charge la recherche. Les propriétés CanRead, CanWrite et CanSeek d'un flux spécifient les opérations que le flux prend en charge.

Voici quelques classes de flux couramment utilisées :

  • FileStream pour la lecture et l'écriture dans un fichier.

  • IsolatedStorageFileStream pour la lecture et l'écriture dans un fichier d'un stockage isolé.

  • MemoryStream pour la lecture et l'écriture dans la mémoire en tant que magasin de stockage.

  • BufferedStream pour l'amélioration des performances de vos opérations de lecture et d'écriture.

  • NetworkStream pour la lecture et l'écriture sur vos sockets réseau.

  • PipeStream pour la lecture et l'écriture sur des canaux nommés ou anonymes.

  • CryptoStream pour la liaison des flux de données aux transformations de chiffrement.

Pour obtenir un exemple d'utilisation de flux de façon asynchrone, consultez E/S sur fichier asynchrones.

Lecteurs et writers

L'espace de noms System.IO fournit également des types pour la lecture des caractères encodés à partir des flux et l'écriture des caractères encodés dans les flux. En général, les flux sont conçus pour l'entrée et la sortie d'octets. Les types lecteur et writer gèrent la conversion des caractères encodés en octets et inversement pour permettre au flux de terminer l'opération. Chaque classe de lecteur et writer est associée à un flux, qui peut être récupéré via la propriété BaseStream de la classe.

Voici quelques classes de lecteur et writer couramment utilisées :

  • BinaryReader et BinaryWriter pour la lecture et l'écriture des types de données primitifs comme valeurs binaires.

  • StreamReader et StreamWriter pour la lecture et l'écriture à l'aide d'une valeur d'encodage pour convertir des caractères en octets et inversement.

  • StringReader et StringWriter pour la lecture et l'écriture des caractères à partir de chaînes et inversement.

  • TextReader et TextWriter servent de classes de base abstraites à d'autres lecteurs et writers qui lisent et écrivent des caractères et des chaînes, mais pas des données binaires.

Voir Comment : lire du texte dans un fichier, Comment : écrire du texte dans un fichier, Comment : lire les caractères d'une chaîne et Comment : écrire des caractères dans une chaîne.

Opérations d’E/S asynchrones

La lecture ou l'écriture de grandes quantités de données peut consommer beaucoup de ressources. Vous devez effectuer ces tâches de façon asynchrone si votre application doit rester réactive aux actions de l'utilisateur. Avec les opérations d'E/S synchrones, le thread d'interface utilisateur est bloqué jusqu'à ce que l'opération consommatrice de ressources soit terminée. Utilisez des opérations d'E/S asynchrones lors du développement d'applications Windows 8.x Store pour empêcher de donner l'impression que votre application a cessé de fonctionner.

Les membres asynchrones contiennent Async dans leurs noms, comme les méthodes CopyToAsync, FlushAsync, ReadAsync et WriteAsync. Utilisez ces méthodes avec async et les mots clés await.

Pour plus d'informations, consultez E/S de fichier asynchrone.

Compression

La compression désigne le processus de réduction de la taille d'un fichier pour le stockage. La décompression consiste à extraire le contenu d'un fichier compressé afin qu'il soit dans un format utilisable. L'espace de noms System.IO.Compression contient des types pour la compression et la décompression de fichiers et de flux.

Les classes suivantes sont fréquemment utilisées lors de la compression et de la décompression de fichiers et de flux :

  • ZipArchive pour la création et l'extraction des entrées de l'archive zip.

  • ZipArchiveEntry pour la représentation d'un fichier compressé.

  • ZipFile : pour la création, l'extraction et l'ouverture d'un package compressé.

  • ZipFileExtensions pour la création et l'extraction des entrées dans un package compressé.

  • DeflateStream pour la compression et la décompression des flux en utilisant l'algorithme Deflate.

  • GZipStream pour la compression et la décompression des flux au format de données gzip.

Voir Comment : compresser et extraire des fichiers.

Stockage isolé

Le stockage isolé est un mécanisme de stockage de données qui offre une isolation et une sécurité en définissant des méthodes standardisées pour associer du code à des données enregistrées. Le stockage fournit un système de fichiers virtuel qui est isolé par utilisateur, assembly et (éventuellement) domaine. Le stockage isolé est particulièrement utile lorsque votre application n'a pas l'autorisation d'accès aux fichiers utilisateur. Enregistrez les paramètres ou les fichiers de votre application d'une façon contrôlée par la stratégie de sécurité de l'ordinateur.

Le stockage isolé n'est pas disponible pour les applications Windows 8.x Store. Utilisez à la place les classes de données d'application de l'espace de noms Windows.Storage. Pour plus d’informations, consultez Données de l’application.

Les classes suivantes sont fréquemment utilisées lors d'une implémentation de stockage isolé :

Voir Stockage isolé.

Opérations d’E/S dans les applications Windows Store

Les applications .NET pour Windows 8.x Store contiennent plusieurs types pour la lecture et l'écriture dans les flux. Toutefois, cet ensemble n'inclut pas tous les types d'E/S .NET.

Quelques différences importantes sont notables pour les opérations d'E/S dans les applications Windows 8.x Store :

Vous pouvez convertir entre les flux .NET Framework et les flux Windows Runtime, si nécessaire. Pour plus d'informations, consultez la section Comment : effectuer une conversion entre les flux .NET Framework et les flux Windows Runtime ou WindowsRuntimeStreamExtensions.

Pour plus d’informations sur les opérations d’E/S dans une application Windows 8.x Store, consultez la section Démarrage rapide : lecture et écriture de fichiers.

E/S et sécurité

Lorsque vous utilisez les classes de l’espace de noms System.IO, vous devez suivre les exigences de sécurité du système d’exploitation telles que les listes de contrôle d’accès (ACL) pour contrôler l’accès aux fichiers et aux répertoires. Ces spécifications s'ajoutent aux spécifications FileIOPermission existantes. Les listes de contrôle d'accès peuvent être gérées par programmation. Pour plus d'informations, consultez Comment : ajouter ou supprimer des entrées dans la liste de contrôle d'accès.

Les stratégies de sécurité par défaut empêchent les applications provenant d'Internet ou de l'intranet d'accéder aux fichiers sur l'ordinateur de l'utilisateur. Par conséquent, n’utilisez pas les classes d’E/S qui requièrent un chemin d’accès à un fichier physique lors de l’écriture du code qui sera téléchargé sur Internet ou sur l’intranet. Utilisez plutôt un stockage isolé pour les applications .NET.

La vérification de sécurité n'est exécutée qu'à la création du flux. Par conséquent, n'ouvrez pas de flux pour le passer ensuite à du code ou à des domaines d'application d'un niveau de sécurité inférieur.

  • Tâches d’E/S courantes
    Présente les tâches d’E/S associées aux fichiers, aux répertoires et aux flux, et des liens vers du contenu et des exemples appropriés pour chaque tâche.

  • E/S sur fichier asynchrones
    Décrit les opérations élémentaires des E/S asynchrones et leurs avantages en termes de performances.

  • Stockage isolé
    Décrit un dispositif de stockage des données qui assure l'isolation et la sécurité en définissant des solutions standardisées visant à associer le code aux données enregistrées.

  • Canaux
    Décrit des opérations anonymes et de canal nommé dans .NET.

  • Fichiers mappés en mémoire
    Décrit les fichiers mappés en mémoire, qui contiennent le contenu de fichiers stockés sur le disque dans la mémoire virtuelle. Vous pouvez utiliser des fichiers mappés en mémoire afin de modifier des fichiers très volumineux et de créer la mémoire partagée pour la communication entre processus.