begin process at 2013 05 25 18:57:24
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > ACCÈS DIRECT FICHIER

ACCÈS DIRECT FICHIER


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers / Disque Niveau :Débutant Date de création :26/07/2005 Date de mise à jour :07/02/2008 10:48:29 Vu :9 845

Auteur : k_wet

Ecrire un message privé
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

 Description

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

  • #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;
  • }
#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


 Historique

07 février 2008 10:48:29 :
Petite modification, compile maintenant sous gcc.

 Sources de la même categorie

COMPTER LE NOMBRE DE PAGES D'UN FICHIER PDF par Renfield
Source avec Zip Source avec une capture GENERE BMP par lajouad
Source avec Zip Source avec une capture GETIONNAIRE D'UNE BIBLIOTHÉQUE EN C par benzarabel
FONCTION D'ÉDITION DE FICHIER BIT À BIT [C-MULTIPLATEFORME] par lynxtyle
Source avec Zip Source avec une capture UN GESTIONNAIRE DU FICHIER par benzarabel

Commentaires et avis

Commentaire de vecchio56 le 26/07/2005 19:11:35 administrateur CS

J'adore les programmes qui se terminent par getchar

Commentaire de Urgo le 26/07/2005 20:14:57

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???

Commentaire de k_wet le 26/07/2005 20:38:26

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.

Commentaire de aardman le 26/07/2005 21:25:09

Salut,
Qu'entends tu par "access direct aux fichiers" ?

Commentaire de k_wet le 27/07/2005 09:38:25

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().

Commentaire de deck_bsd le 28/07/2005 13:58:17

Appelons un chat un chat mdr,
Quand tu dit l'écriture en texte, tu peu appeler ca accès en mode "fichier séquenciel" et pour l'autre possibilité cela s'apelle "fichier binaire" :D


++All

Commentaire de k_wet le 28/07/2005 15:45:42

oui, mais pour expliquer, je ne sais pas quel langage utiliser, alors, j'utilise le plus simple à comprendre car je sais qu'il y a des personnes qui ont du mal avec les thermes techniques.

Commentaire de boumarsel le 30/07/2005 18:36:28

au moment ou il y a des gens qui se cassent la tete pour publier un code tres util d'autres qui publient n'importe quoi et dans la plus part des cas ne font que des copier-coller de leurs cours.
- pour ecrire un programme destiné aux debutants, l'auteur doit etre un programmeur initié
- pour ecrire un programme destiné aux initiés, l'auteur doit etre un expert
- et les debutants tous ce qu'ils ont à faire c'est d'apprendre et ameliorer leurs niveau avant de penser à publier une source sur un tel site
merci

Commentaire de BruNews le 30/07/2005 20:33:41 administrateur CS

pas trop grave, je planifie un petit nettoyage de cppfrance pour la fin d'année.

Commentaire de deck_bsd le 31/07/2005 09:05:28

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

Commentaire de cashoverray le 01/08/2005 12:46:54

bon moi je trouve que DECK_BSD a raison , on doit aussi aide les debutants

Commentaire de BruNews le 01/08/2005 13:09:56 administrateur CS

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.

Commentaire de boumarsel le 08/08/2005 18:48:19

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...)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,981 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales