Haskell:
Création d'un fichier temporaire

How to:

Haskell rend la gestion des fichiers temporaires élégante avec la bibliothèque temporary. Voici comment faire :

import System.IO.Temp (withSystemTempFile)
import System.IO (hPutStrLn, hGetContents)

main :: IO ()
main = withSystemTempFile "monFichierTemp.txt" $ \path handle -> do
    -- Écrire dans le fichier temporaire
    hPutStrLn handle "Voici un exemple de texte temporaire."
  
    -- Repositionner le curseur au début pour lire depuis le début du fichier
    hSeek handle AbsoluteSeek 0 
  
    -- Lire le contenu et l'afficher
    contenu <- hGetContents handle
    putStrLn contenu
    -- Le fichier est supprimé automatiquement ici

Quand on exécute ce code, il affiche :

Voici un exemple de texte temporaire.

Le fichier existe pendant l’exécution et est supprimé automatiquement à la fin.

Deep Dive

Historiquement en Haskell, on gérait les fichiers temporaires manuellement, mais c’était risqué et salissant. System.IO.Temp offre une abstraction pour les créer de manière sûre, qui garantit la suppression du fichier en fin d’utilisation. Il y a différentes fonctions selon les besoins : withSystemTempFile, withTempFile, createTempDirectory, et d’autres. Chaque fonction a ses spécificités. Par exemple, withSystemTempFile est idéale pour des fichiers dont on connaît le template de nom, et createTempDirectory pour un répertoire temporaire.

Alternativement, on pourrait utiliser System.IO pour un contrôle très fin, à l’ancienne. Mais pourquoi s’embêter quand temporary nous couvre ?

Enfin, derrière les rideaux, temporary utilise l’API de fichiers POSIX pour garantir la compatibilité et la sécurité.

See Also