Index du site
Google

Les entrées-sorties fichier

Copie d'écran

L'archive zippée tec007.zip contient les fichiers de la page.

Nous allons voir les fonctions permettant d'ouvrir, d'écrire, de lire et de fermer un fichier texte. Il existe bien sûr des fonctions pour des fichiers binaires, mais nous ne traitons pas ce sujet ici (et pour le binaire, attention aux types de données dont la taille en mémoire dépend de la plateforme). Deux boites de dialogues sont proposées pour gérer ces entrées-sorties en relation avec l'interface graphique de Windows. Le programme type bloc-note permet de créer ou d'ouvrir un fichier texte, de le modifier et de l'enregistrer, mais il est rudimentaire. Par exemple, le contrôle edit autorise une seule annulation, et il ne peut contenir par défaut que 32767 caractères, alors n'utilisez pas ce programme pour des fichiers importants (en taille comme en valeur).

haut de page  Fichiers

Les entrées-sorties de fichiers en langage C s'implémentent directement dans Windows, à l'aide de:

Ces éléments se trouvent dans le fichier source tec_edit.c (en-tête tec_edit.h), dans deux fonctions (hEdit est le handle du contrôle edit, pour sNomFichier voir ci-dessous):

// Affiche le contenu d'un fichier texte dans un contrôle edit:
int LireFichier(HWND hEdit, TCHAR *sNomFichier);

// Copie le contenu d'un contrôle edit dans un fichier texte:
int EcrireFichier(HWND hEdit, TCHAR *sNomFichier);

LireFichier ouvre le fichier en lecture, lit les caractères du fichier, les copie dans un pointeur de TCHAR alloué par malloc, ajoute un retour chariot (\r) à chaque fin de ligne (\n) pour que le contrôle edit s'y retrouve, et le message WM_SETTEXT est envoyé au contrôle edit. EcrireFichier ouvre le fichier en écriture, lit les caractères du contrôle edit, sans les retours chariot, les copie dans un pointeur de TCHAR alloué et écrit le tout dans le fichier.

haut de page  Boites de dialogue

Nous implémentons deux boites de dialogue: une pour ouvrir un fichier existant dans l'arborescence de Windows, l'autre pour enregistrer un fichier. Rappelons que TCHAR* et LPTSTR c'est la même chose (de même LPCTSTR est identique à const TCHAR*). Les éléments utilisés sont:

#define CH_DIALOGUE_FILTRE _T("Fichier texte (*.txt;*.c;*.html)\0*.txt;*.c;*.html\0Tous (*.*)\0*.*\0\0")

Ces éléments se trouvent dans le fichier source tec_fichier.c (en-tête tec_fichier.h), dans deux fonctions:

// Boite de dialogue d'ouverture de fichier:
int OuvrirFichier(HWND hWnd, LPTSTR sNomFichier, LPTSTR sTitreFichier, LPCTSTR sInvite, LPCTSTR sFiltre, LPCTSTR sExtension);

// Boite de dialogue d'enregistrement de fichier:
int EnregistrerFichier(HWND hWnd, LPTSTR sNomFichier, LPTSTR sTitreFichier, LPCTSTR sInvite, LPCTSTR sFiltre, LPCTSTR sExtension);

OuvrirFichier renvoie le résultat de l'appel à l'API Windows GetOpenFileName et EnregistrerFichier renvoie le résultat de l'appel à GetSaveFileName. L'une comme l'autre se servent des informations entrées dans la structure OPENFILENAME dont elles prennent l'adresse (un pointeur) en paramètre (&ofn). Elles renvoient une valeur différente de zéro si l'opération s'est déroulée complètement, et elles renvoient zéro si une erreur s'est produite ou si l'utilisateur a annulé l'opération. Cette même structure OPENFILENAME, en plus de servir à initialiser les boites de dialogue, est remplie avec les choix de l'utilisateur.

[màj 22 avril 2008]

Copyright © 2008 B. Challier • légalcontact Valid XHTML 1.0 Valid CSS 2haut