Accès direct fichier

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 969 fois - Téléchargée 30 fois

Contenu du snippet

En fait, c'est un petit tuto' en C mais je ne savais pas si je pouvais le mettre dans la rubrique

C'est juste un petit programme pour aider les débutants avec l'accès direct aux fichier.
J'ai essayé de faire aussi light que possible pour qu'il soit facile à lire.
J'espère qu'il aidera suffisament pour l'accès direct.

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int num;
    char nom[30];
}s_element;

FILE *fichier;

int main()
{
    char choix, c;
    int tell; //variable pour le ftell().
    
    s_element *personne;
    
    //ouverture du fichier en écriture (données précédentes écrasées).
    fichier = fopen("c:\\toto.txt", "w");
    
    if(fichier == NULL)
    {
        printf("Erreur lors de l'ouverture du fichier\n");
        return 1;
    }

    personne = (s_element*)calloc(1, sizeof(s_element));
    
    printf("Tapez 0 comme numero pour finir la saisie\n\n");
    
    do
    {
        printf("Veuillez entrer votre numero : ");
        scanf("%i", &personne->num);
        fflush(stdin); //on vide le tampon d'entrée

        //ne pas écrir dans le fichier si c le dernier élément (num=0)
        if(personne->num != 0)
        {
            printf("Veuillez entrer votre nom : ");
            scanf("%s", personne->nom);
            fflush(stdin);
            
            //écriture dans le fichier de l'élément personne
            fwrite(personne, sizeof(s_element), 1, fichier);
        }
        
    }while(personne->num != 0);
    
    //fermeture du fichier.
    fclose(fichier);
    
    printf("\nLecture des informations\n");
    getchar();
    
    //ouverture du fichier en lecture écriture
    fichier = fopen("c:\\toto.txt", "r+");
    
    while(fread(personne, sizeof(s_element), 1, fichier))
    {
        printf("%i\t%s\n", personne->num, personne->nom);
    }
    fclose(fichier);
    
    printf("Quel element souhaitez-vous changer : ");
    scanf("%i", &choix);
    fflush(stdin);
    
    //ouverture en lecture/écriture.
    fichier = fopen("c:\\toto.txt", "r+");
    
    while(fread(personne, sizeof(s_element), 1, fichier))
    {
        //si le numero est celui recherché
        //(le premier qui est trouvé dans ce cas)
        if(personne->num == choix)
        {
            //sauvegarde du curseur fichier au début de l'élément à modifier
            tell = ftell(fichier)-(sizeof(s_element));
            
            printf("%i\t%s\n", personne->num, personne->nom);
            
            printf("Veuillez entrer votre numero : ");
            scanf("%i", &personne->num);
            fflush(stdin);
            
            printf("Veuillez entrer votre nom : ");
            scanf("%s", personne->nom);
            fflush(stdin);
            
            //positionnement sur l'élément à modifier
            fseek(fichier, tell,0);
            
            //écriture d'un élément personne à l'endroit désigné par fseek();
            fwrite(personne, sizeof(s_element),1 , fichier);            
            break;
        }
    }   
    //fermeture du fichier.
    fclose(fichier);
    
    printf("Programme termine avec succes.\n");
    getchar();
    
    return 0;
}

Conclusion :


Si vous trouvez qu'il est important qu'une modification soit apporté à ce source, je vous remerci de me le faire savoir

A voir également

Ajouter un commentaire

Commentaires

vecchio56
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7 -
J'adore les programmes qui se terminent par getchar
cs_Urgo
Messages postés
780
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
16 avril 2009
1 -
Oui, il est important que tu mettes ta source à jour!!!
Premièrement corrige tes fautes (si tu le peux).
Deuxièmement t'as quel compilateur? Dev-cpp???
k_wet
Messages postés
3
Date d'inscription
vendredi 10 septembre 2004
Statut
Membre
Dernière intervention
28 juillet 2005
-
pour le getchar(), c'est juste pour le fun, mais concernant les fautes, je ne voit pas de quoi tu veux parler ça marche très bien sous dev-c++, a moins que tu veuille parler des caractères illisibles dans le fichier de sortie, c l'accès direct.
cs_aardman
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2 -
Salut,
Qu'entends tu par "access direct aux fichiers" ?
k_wet
Messages postés
3
Date d'inscription
vendredi 10 septembre 2004
Statut
Membre
Dernière intervention
28 juillet 2005
-
Lorsque tu veux écrir dans un fichier, tu a 2 possibilitées principales : en texte genre fprintf() donc avec un format d'écriture ("%s", "%i", ...) et tu a l'accès direct.
L'accès direct te permet d'écrire le contenu de structure directement dans le fichier et de le récupérer très facilement sans avoir besoin de créer des fonctions d'extraction (fabriquées de toutes pièces) ou d'utiliser des fonctionsavec code format (ex : fscanf)
La ligne 73 "fread(personne, sizeof(element), 1, fichier)" veut dir lire dans le fichier une donnée de type 'element' (structure) et la stocker dans la variable structure.
Si lors du fread() tu veux aficher le contenu des variables, tu peux l'afficher avec un simple printf(). si tu veux avoir un fichier lisible en sortie, tu peux créer un 2ème flux fichier et écrire dedan avec fprintf().

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.