Accès direct fichier

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 504 fois - Téléchargée 31 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
boumarsel Messages postés 298 Date d'inscription jeudi 12 juin 2003 Statut Membre Dernière intervention 9 juillet 2008 1
8 août 2005 à 18:48
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...)
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 août 2005 à 13:09
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.
cashoverray Messages postés 26 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 29 septembre 2005
1 août 2005 à 12:46
bon moi je trouve que DECK_BSD a raison , on doit aussi aide les debutants
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
31 juil. 2005 à 09:05
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
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 juil. 2005 à 20:33
pas trop grave, je planifie un petit nettoyage de cppfrance pour la fin d'année.

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.