Accès direct fichier

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

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.