Sortie d’entrée dans le fichier C#. E/S de fichiers et de flux

déposer). Bien que les threads soient associés à différents appareils physiques, le comportement de tous les threads est le même. Par conséquent, les classes et méthodes d’E/S peuvent être appliquées à de nombreux types de périphériques.

Au niveau le plus bas de la hiérarchie Fils d'E/S il y a des threads qui exploitent des octets. En effet, de nombreux périphériques sont orientés octets lors de l'exécution d'opérations d'E/S. Cependant, il est plus courant que les humains opèrent avec des symboles, c'est pourquoi des flux de caractères ont été développés, qui sont en fait des shells qui convertissent les flux d'octets en flux de caractères et vice versa. De plus, des flux ont été implémentés pour travailler avec des valeurs int -, double -, short -, qui représentent également un wrapper pour les flux d'octets, mais ne fonctionnent pas avec les valeurs elles-mêmes, mais avec leur représentation interne sous forme de binaire codes.

La partie centrale du système de streaming C# est occupée par la classe Stream dans l'espace de noms System.IO. La classe Stream représente un flux d'octets et constitue la classe de base pour toutes les autres classes de flux. De la classe Stream, les classes de flux d'octets suivantes sont dérivées :

  1. FileStream est un flux d'octets conçu pour fichier E/S
  2. BufferedStream - encapsule un flux d'octets et ajoute une mise en mémoire tampon, ce qui dans de nombreux cas améliore les performances du programme ;
  3. MemoryStream est un flux d'octets qui utilise la mémoire pour stocker des données.

Le programmeur peut dériver le sien cours en streaming. Cependant, pour la grande majorité des applications, les threads intégrés suffisent.

Nous examinerons en détail la classe FileStream, les classes StreamWriter et StreamReader, qui sont des wrappers pour classe FileStream et vous permettant de convertir des flux d'octets en flux de caractères, ainsi que les classes BinaryWriter et BinaryReader, qui sont des wrappers pour la classe FileStream et vous permettent de convertir des flux d'octets en flux binaires pour travailler avec int -, double -, short - etc. valeurs.

Flux d'octets

Pour créer un flux d'octets associé à un fichier, un objet de la classe FileStream est créé. Dans ce cas, plusieurs constructeurs sont définis dans la classe. Le constructeur le plus couramment utilisé est celui qui ouvre un flux en lecture et/ou en écriture :

FileStream (nom de fichier chaîne, mode FileMode)

  1. le paramètre filename spécifie le nom du fichier auquel le flux de données d'E/S sera associé ; dans ce cas, le nom de fichier définit soit chemin complet au fichier, ou le nom du fichier qui se trouve dans le dossier bin/debug de votre projet.
  2. Le paramètre mode précise le mode d'ouverture du fichier, qui peut prendre une des valeurs possibles définies par l'énumération FileMode :
    • FileMode.Append - conçu pour ajouter des données à la fin du fichier ;
    • FileMode.Create - conçu pour créer un nouveau fichier, et s'il existe un fichier du même nom, il sera d'abord supprimé ;
    • Mode Fichier. CréerNouveau- conçu pour créer un nouveau fichier, alors qu'un fichier du même nom ne devrait pas exister ;
    • FileMode.Open - conçu pour ouvrir un fichier existant ;
    • FileMode.OpenOrCreate - si le fichier existe, l'ouvre, sinon en crée un nouveau
    • FileMode.Truncate - s'ouvre fichier existant, mais tronque sa longueur à zéro

Si la tentative d'ouverture du fichier échoue, alors l'une des exceptions est générée : FileNotFoundException - le fichier ne peut pas être ouvert en raison de son absence, IOException - le fichier ne peut pas être ouvert en raison d'une erreur d'entrée/sortie, ArgumentNullException - le nom du fichier est une valeur nulle, ArgumentException - le paramètre est en mode incorrect, SecurityException - l'utilisateur n'a pas de droits d'accès, DirectoryNotFoundException - le répertoire est incorrectement spécifié.

Une autre version du constructeur permet de restreindre l'accès en lecture seule ou en écriture seule :

FileStream (nom de fichier chaîne, mode FileMode, FileAccess comment)

  1. les paramètres filename et mode ont le même objectif que dans version précédente designer;
  2. le paramètre how précise comment on accède au fichier et peut prendre une des valeurs définies par l'énumération FileAccess :
  1. FileAccess.Read - lecture seule ;
  2. FileAccess.Write - écriture uniquement ;
  3. FileAccess.ReadWrite - lecture et écriture.

Une fois qu'un flux d'octets est associé à un fichier physique, le pointeur de flux interne est défini sur l'octet de début du fichier.

Pour lire l'octet suivant d'un flux associé à un fichier physique, utilisez la méthode ReadByte(). Après avoir lu l'octet suivant, le pointeur interne se déplace vers l'octet suivant du fichier. Si la fin du fichier est atteinte, la méthode ReadByte() renvoie -1.

Pour écrire des données octet par octet dans un flux, utilisez la méthode WriteByte().

Lorsque vous avez fini de travailler avec le fichier, vous devez le fermer. Pour ce faire, appelez simplement la méthode Close(). Une fois le dossier fermé, ils sont libérés ressources système, préalablement alloués à ce fichier, ce qui permet de les utiliser pour travailler avec d'autres fichiers.

Regardons un exemple d'utilisation de la classe FileStream pour copier un fichier dans un autre. Mais d'abord, créons un fichier texte text.txt dans le dossier bin/debug du projet en cours. Et ajoutez-y des informations arbitraires, par exemple :

12 456 Bonjour ! 23.67 4 : Message utilisant le système ; en utilisant System.Text ; en utilisant System.IO ; //pour travailler avec l'espace de noms de flux MyProgram ( class Program ( static void Main() ( try ( FileStream fileIn = new FileStream("text.txt", FileMode.Open, FileAccess.Read); FileStream fileOut = new FileStream("newText. txt", FileMode.Create, FileAccess.Write); int i; while ((i = fileIn.ReadByte())!=-1) ( //écrit le fichier suivant dans le flux associé au fichier fIleOut fileOut.WriteByte( (octet )i); ) fileIn.Close(); fileOut.Close( ) catch (Exception EX) ( Console.WriteLine(EX.Message); ) ) )

Exercice. Réfléchissez à la raison pour laquelle la variable i est spécifiée type entier. Il serait possible d'indiquer type d'octet ?

Flux de personnages

Pour créer un flux de caractères, vous devez placer un objet de la classe Stream (par exemple, FileStream ) « à l'intérieur » de l'objet classe StreamWriter ou un objet classe StreamReader. Dans ce cas, le flux d'octets sera automatiquement converti en flux de caractères.

Classe StreamWriter conçu pour organiser le flux de caractères de sortie. Il définit plusieurs constructeurs. L’un d’eux s’écrit ainsi :

StreamWriter (flux de flux);

où le paramètre stream spécifie le nom d'un flux d'octets déjà ouvert.

Par exemple, vous pouvez créer une instance de la classe StreamReader comme suit :

StreamWriter fileOut=new StreamWriter(new FileStream("text.txt", FileMode.Create, FileAccess.Write));

Ce constructeur lève une ArgumentException si le flux n'est pas ouvert pour la sortie, et une ArgumentNullException s'il est nul.

Un autre type de constructeur permet d'ouvrir un flux directement via des appels de fichiers :

StreamWriter(nom de la chaîne);

où le paramètre name spécifie le nom du fichier à ouvrir.

Par exemple, contactez à ce constructeur peut être fait comme suit :

StreamWriter fileOut=new StreamWriter("c:\temp\t.txt");

Et une autre variante du constructeur StreamWriter :

StreamWriter(nom de chaîne, bool appendFlag);

où le paramètre name spécifie le nom du fichier à ouvrir ;

Le paramètre appendFlag peut accepter vrai- si vous devez ajouter des données à la fin du fichier, ou false - si le fichier doit être écrasé.

Par exemple:

StreamWriter fileOut=new StreamWriter("t.txt", true);

Vous pouvez maintenant appeler la méthode WriteLine pour écrire des données dans le flux fileOut. Cela peut être fait comme suit :

fileOut.WriteLine("test");

DANS dans ce cas le mot test sera ajouté à la fin du fichier t.txt.

Classe StreamReader conçu pour organiser le flux de caractères d’entrée. L'un de ses constructeurs ressemble à ceci :

StreamReader (flux de flux);

où le paramètre stream spécifie le nom d'un flux d'octets déjà ouvert.

En C#, les symboles sont implémentés Encodage Unicode. Afin de pouvoir traiter fichiers texte, contenant des caractères russes créés, par exemple, dans le Bloc-notes, il est recommandé d'appeler vue suivante Constructeur StreamReader :

StreamReader fileIn=new StreamReader("c:\temp\t.txt", Encoding.GetEncoding(1251));

Le paramètre Encoding.GetEncoding(1251) indique que la conversion sera effectuée du code Windows-1251 (une des modifications du code ASCII contenant des caractères russes) vers Unicode. Encoding.GetEncoding(1251) est implémenté dans l'espace de noms System.Text.

Vous pouvez désormais utiliser la méthode ReadLine pour lire les données du flux fileIn. De plus, si la fin du fichier est atteinte, la méthode ReadLine renverra null.

Considérons un exemple dans lequel les données d'un fichier sont copiées dans un autre, mais en utilisant les classes StreamWriter et StreamReader.

static void Main() ( StreamReader fileIn = new StreamReader("text.txt", Encoding.GetEncoding(1251)); StreamWriter fileOut=new StreamWriter("newText.txt", false); string line; while ((line=fileIn .ReadLine())!=null) //jusqu'à ce que le flux soit vide ( fileOut.WriteLine(line); ) fileIn.Close();

Exercice. Découvrez ce que fait la méthode ReadToEnd() et quand il est judicieux de l'utiliser.

Ainsi, cette méthode copier un fichier dans un autre nous donnera le même résultat que l'utilisation de flux d'octets. Toutefois, son travail sera moins efficace, car sera dépensé temps supplémentaire pour convertir des octets en caractères. Mais les flux de personnages ont leurs avantages. Par exemple, nous pouvons utiliser expressions régulières pour rechercher des fragments de texte spécifiés dans un fichier.

static void Main() ( StreamReader fileIn = new StreamReader("text.txt"); StreamWriter fileOut=new StreamWriter("newText.txt", false); string text=fileIn.ReadToEnd(); Regex r= new Regex (@ "[-+]?\d+"); Correspond à un entier = r.Match(text); while (integer.Success) ( fileOut.WriteLine(integer); integer = integer.NextMatch(); ) fileIn.Close(); fileOut.Close();

Cette documentation a été archivée et n'est plus conservée.

Fichier et flux d'E/S faire référence au transfert de données depuis ou vers un support de stockage. Dans le .NET Framework, les espaces de noms System.IO contiennent des types qui fournissent des opérations de lecture et d'écriture synchrones et asynchrones pour les flux et les fichiers de données. De plus, ces espaces de noms contiennent des types qui effectuent la compression et la décompression des fichiers, ainsi que des types qui assurent la communication entre les canaux et les ports série.

Un fichier est une séquence d’octets ordonnée et nommée qui dispose d’un stockage persistant. Lorsque vous travaillez avec des fichiers, les chemins de répertoire, les périphériques de stockage ainsi que les noms de fichiers et de répertoires sont utilisés. Contrairement à un fichier, un flux est une séquence d'octets qui peut être utilisée pour écrire ou lire sur un périphérique de stockage auxiliaire, qui est l'un des périphériques de stockage (tels que des disques ou de la mémoire). Il existe plusieurs types de périphériques de stockage autres que les disques, et il existe plusieurs types de flux autres que flux de fichiers, tels que les flux réseau, les flux mémoire et les flux de canalisations.

  • Lire et écrire gros volumes les données peuvent être gourmandes en ressources. Ces tâches doivent être effectuées de manière asynchrone si l'application veut continuer à répondre aux demandes des utilisateurs. Dans le cas d'opérations d'E/S synchrones, le thread interface utilisateur sera bloqué jusqu’à la fin de l’opération gourmande en ressources. Lors du développement d'applications pour Windows Store 8.x utilise des E/S asynchrones pour éviter l’impression que l’application a cessé de s’exécuter.

    Les noms d'éléments asynchrones contiennent Async , par exemple : , et . Utilisez ces méthodes avec mots-clés asynchrone et wait .

    Plus d'informations voir la rubrique.

    La compression est le processus de réduction de la taille d'un fichier enregistré. Le déballage est le processus d'extraction du contenu fichier compressé, ce qui le met dans un format utilisable. L'espace de noms contient des types permettant de compresser et de décompresser des fichiers et des flux.

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

    • Le stockage isolé est un mécanisme de stockage de données qui assure l'isolation et la sécurité en définissant des méthodes standardisées pour associer le code aux données stockées. Le stockage fournit du virtuel système de fichiers, isolé par utilisateur, assembly et (éventuellement) domaine. Le stockage isolé est particulièrement utile lorsqu'une application n'est pas autorisée à accéder aux fichiers de l'utilisateur. Vous pouvez enregistrer les paramètres ou les fichiers d'une application d'une manière contrôlée par la politique de sécurité de votre ordinateur.

      Le stockage isolé n’est pas disponible pour les applications Windows 8.x Store. Utilisez plutôt les classes de données d’application contenues dans le fichier . Pour plus d’informations, consultez Accéder aux données de l’application dans le Centre de développement Windows.

      Les classes suivantes qui implémentent le stockage isolé sont souvent utilisées :

        NET pour Windows 8.x Store contiennent de nombreux types de lecture et d’écriture dans des flux, mais cet ensemble ne contient pas tous les types d’E/S .NET Framework.

        Il existe quelques différences importantes à noter dans l’utilisation des E/S des applications de style Windows 8.x Store :

        • Les types spéciaux liés aux opérations sur les fichiers, tels que , et , ne sont pas inclus dans les applications .NET pour Windows 8.x Store. Utilisez plutôt les types dans l’espace de noms de l’environnement Exécution Windows, comme et .

          Le stockage isolé n’est pas disponible. Utilisez plutôt les données de l’application.

        • Utiliser méthodes asynchrones, tels que et , pour empêcher le blocage du thread de l'interface utilisateur.

          Les exigences de sécurité doivent être respectées lors de l'utilisation de classes dans un espace de noms système opérateur, comme les listes de contrôle d'accès pour contrôler l'accès aux fichiers et aux répertoires. Cette exigence s’ajoute aux autres exigences. Les listes de contrôle d’accès peuvent être gérées par programme. Pour plus d'informations, voir .

          Par défaut, la stratégie de sécurité n'autorise pas l'accès aux fichiers de l'ordinateur d'un utilisateur via Internet ou à partir d'applications intranet. Par conséquent, lorsque vous composez votre code, n'utilisez pas de classes d'E/S qui nécessitent un chemin d'accès vers fichier physique, téléchargé via Internet ou intranet. Utilisez plutôt les données d’application .NET Framework ou Windows 8.x Store pour les applications classiques.

          Les contrôles de sécurité ne sont effectués que lorsqu'un thread est créé. Par conséquent, il n’est pas recommandé d’ouvrir un flux, puis de le transmettre à des domaines de code ou d’application moins fiables.

          TitreDescription
          Contient une liste de tâches d'E/S associées aux fichiers, répertoires et flux, ainsi que des liens vers du contenu associé et des exemples pour chaque tâche.
          Décrit les avantages et les opérations de base des entrées et sorties asynchrones.
          Décrit un mécanisme de stockage de données qui offre autonomie et sécurité en définissant des méthodes standardisées pour associer le code aux données protégées.
          Décrit les opérations avec des canaux anonymes et nommés dans le .NET Framework.
          Description des fichiers mappés en mémoire qui vous permettent de placer le contenu des fichiers du disque dans mémoire virtuelle. Avec leur aide, vous pouvez apporter des changements très gros fichiers et créez une mémoire partagée pour la communication interprocessus.

          Montrer:



  • Des questions ?

    Signaler une faute de frappe

    Texte qui sera envoyé à nos rédacteurs :