Accès direct fichier

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 224 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

Messages postés
300
Date d'inscription
jeudi 12 juin 2003
Statut
Membre
Dernière intervention
9 juillet 2008
1
y a pas mal de gens qui pose des questions dans le forum du genre : j'ai ecrit cette partie du code mais ça ne fonctionne pas, que dois je faire? Ils obtiennent ainsi une solution en plus d'autres remarques sur l'optimisation du code par exemple.
j'ai dit ça parceque j'ai remarqué que des codes tres interessants sont perdus dans des centaines de participations qui ne sont en majorité des cas que des repetitions de ce qui a ete publié au paravant (essayez par exemple de lancer une recherche sur : convertisseur hexadicimal ou socket).
Generalement un debutant ne publie que des programmes ordinaires sur les techniques de base de la programmation (gestion simple de la memoire, acces au fichier, application des algorithmes simples...)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
Mais si le forum est aussi fait pour cela, on pose sa fonction et on demande l'avis des autres, c'est d'ailleurs ce qui se fait souvent.
D'abord on étudie et ensuite on publie, il y a un temps pour chaque chose, c'est ainsi qu'on pratique dans toutes les disciplines.
Messages postés
26
Date d'inscription
mercredi 28 juillet 2004
Statut
Membre
Dernière intervention
29 septembre 2005

bon moi je trouve que DECK_BSD a raison , on doit aussi aide les debutants
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
Boumarsel, et comment les débutans font pour que leur faute soit connues? ou qu'ils parfaires leur technique alors que il ne peuvent pas poster de sources et donc personne ne peut les voir? et donc personnes ne peu leur donner de conseils :s . C'est pas uniquement en postant des questions que ca les aideras. Enfin ça n'est que mon avis.


++All
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
pas trop grave, je planifie un petit nettoyage de cppfrance pour la fin d'année.
Afficher les 13 commentaires

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.