Elixir - Fichier IO

File IO fait partie intégrante de tout langage de programmation car il permet au langage d'interagir avec les fichiers du système de fichiers. Dans ce chapitre, nous aborderons deux modules - Chemin et Fichier.

Le module de chemin

le pathmodule est un très petit module qui peut être considéré comme un module d'aide pour les opérations du système de fichiers. La majorité des fonctions du module File attendent des chemins comme arguments. Le plus souvent, ces chemins seront des binaires réguliers. Le module Path fournit des fonctionnalités pour travailler avec de tels chemins. Il est préférable d'utiliser les fonctions du module Path plutôt que de simplement manipuler les binaires, car le module Path prend en charge différents systèmes d'exploitation de manière transparente. Il est à noter qu'Elixir convertira automatiquement les barres obliques (/) en barres obliques inverses (\) sous Windows lors de l'exécution d'opérations sur les fichiers.

Prenons l'exemple suivant pour mieux comprendre le module Path -

IO.puts(Path.join("foo", "bar"))

Lorsque le programme ci-dessus est exécuté, il produit le résultat suivant -

foo/bar

Le module chemin fournit de nombreuses méthodes. Vous pouvez consulter les différentes méthodes ici . Ces méthodes sont fréquemment utilisées si vous effectuez de nombreuses opérations de manipulation de fichiers.

Le module de fichiers

Le module de fichiers contient des fonctions qui nous permettent d'ouvrir des fichiers en tant que périphériques IO. Par défaut, les fichiers sont ouverts en mode binaire, ce qui oblige les développeurs à utiliser leIO.binread et IO.binwritefonctions du module IO. Créons un fichier appelénewfile et écrivez-y des données.

{:ok, file} = File.read("newfile", [:write]) 
# Pattern matching to store returned stream
IO.binwrite(file, "This will be written to the file")

Si vous ouvrez le fichier dans lequel nous venons d'écrire, le contenu sera affiché de la manière suivante -

This will be written to the file

Voyons maintenant comment utiliser le module de fichiers.

Ouvrir un fichier

Pour ouvrir un fichier, nous pouvons utiliser l'une des 2 fonctions suivantes -

{:ok, file} = File.open("newfile")
file = File.open!("newfile")

Comprenons maintenant la différence entre le File.open fonction et le File.open!() fonction.

  • le File.openLa fonction renvoie toujours un tuple. Si le fichier est ouvert avec succès, il renvoie la première valeur du tuple comme:oket la seconde valeur est littérale de type io_device. Si une erreur est provoquée, il renverra un tuple avec la première valeur comme:error et deuxième valeur comme raison.

  • le File.open!() la fonction retournera un io_devicesi le fichier est ouvert avec succès, sinon, une erreur sera générée. REMARQUE: il s'agit du modèle suivi dans toutes les fonctions du module de fichiers dont nous allons parler.

Nous pouvons également spécifier les modes dans lesquels nous voulons ouvrir ce fichier. Pour ouvrir un fichier en lecture seule et en mode d'encodage utf-8, nous utilisons le code suivant -

file = File.open!("newfile", [:read, :utf8])

Ecrire dans un fichier

Nous avons deux façons d'écrire dans des fichiers. Voyons le premier utilisant la fonction d'écriture du module File.

File.write("newfile", "Hello")

Mais cela ne doit pas être utilisé si vous effectuez plusieurs écritures dans le même fichier. Chaque fois que cette fonction est appelée, un descripteur de fichier est ouvert et un nouveau processus est généré pour écrire dans le fichier. Si vous effectuez plusieurs écritures en boucle, ouvrez le fichier viaFile.openet écrivez-y en utilisant les méthodes du module IO. Prenons un exemple pour comprendre la même chose -

#Open the file in read, write and utf8 modes. 
file = File.open!("newfile_2", [:read, :utf8, :write])

#Write to this "io_device" using standard IO functions
IO.puts(file, "Random text")

Vous pouvez utiliser d'autres méthodes de module IO comme IO.write et IO.binwrite pour écrire dans des fichiers ouverts en tant que io_device.

Lecture à partir d'un fichier

Nous avons deux façons de lire des fichiers. Voyons le premier en utilisant la fonction de lecture du module Fichier.

IO.puts(File.read("newfile"))

Lors de l'exécution de ce code, vous devriez obtenir un tuple avec le premier élément comme :ok et le second comme contenu de newfile

Nous pouvons également utiliser le File.read! fonction pour simplement récupérer le contenu des fichiers.

Fermer un fichier ouvert

Chaque fois que vous ouvrez un fichier à l'aide de la fonction File.open, une fois que vous avez fini de l'utiliser, vous devez le fermer en utilisant le File.close fonction -

File.close(file)