Les fichiers

Introduction

Lorsque l'on souhaite travailler simplement avec les fichiers, on a intérêt à utiliser les fonctions type fopen() ou open() à moins que les performances soient un problème, au quel cas, sous Windows, on a intérêt à se tourner ver l'API Win32 (CreateFile(), ReadFile(), WriteFile() ...).

On note que sous Windows, l'implémentation des fonctions type fopen() ou open() finit toujours par un appel à l'API Win32 CreateFile().

Entrées sorties buffeurisées (fopen()...)

Il n'y a rien de bien compliqué dans la gestion des fichiers. Une des choses auxquelles on doit prendre garde est le mode d'ouverture (t comme texte ou b comme binaire) en particulier sous Windows ou les fichiers sont ouverts en mode texte par défaut.

Fonctions utiles :

Exemple : fopen.c

les fonctions bas niveau type open()

Ces fonctions ont l'avantage de permettre l'écriture de code portable (Windows-Unix). On doit toujours se méfier du fait que ces fonctions ouvrent par défaut le fichier en mode texte sous Windows, donc qu'il faut changer le mode d'ouverture avec setmode( fd, O_BINARY ) si le fichier est binaire sous peine de remplacement des caractères 10 par 13/10 (\r\n) .

Fonctions utiles :

Exemple : open.c

Obtention d'informations avec stat()

Exemple : stat.c

Effacement avec unlink()

Voir aussi :

Exemple : unlink.c

Gestion des locks d'un fichier

Il n'existe pas d'API portable pour gérer les locks des fichiers. Sous Unix, on utilise en général fcntl() et sous Windows, on utilise locking() qui appelle en interne LockFile()

Exemple : lock.c

Création d'une arborescence

L'exemple suivant permet de créer plusieurs niveaux de répertoires en un seul appel.

Exemple : createdirectorytree.c et createdirectorytree.h

Parcours d'une arborescence

La programme suivant permet le parcours d'une arborescence avec appel d'un callback à chaque fichier rencontré.

voir parcoursdir.c et parcoursdir.h

opendir(), readdir() et closedir() pour Windows

Portage de ces fonctions pour Windows. Le code provient de la librairie ucd-snmp.

voir opendir.c et opendir.h

Obtenir le répertoire tmp

Voir gettempdir.c et gettempdir.h

Support des fichiers larges

Sous linux, on peut smplement compiler le programme avec -D_FILE_OFFSET_BITS=64 (CFlags obtenu via la commande $ getconf LFS_CFLAGS). Cela change la taille du type off_t notamment utilisé par lseek().

Une autre solution consiste à utiliser explicitement les appels systèmes open64() et à définir __USE_LARGEFILE64.

Sous Windows, les API de base comme SetFilePointerEx() prennent cela en charge.

Valid XHTML 1.0!