Ouvrie et lire le contenu d'un fichier(débutant inside)

psicoblues Messages postés 7 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 16 juin 2007 - 14 juin 2007 à 08:47
psicoblues Messages postés 7 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 16 juin 2007 - 16 juin 2007 à 22:10
Bonjour, voilà je me lance dans le monde du dévelopement avec pour langage le C.
J'ai installé un turbo C sur un MS-DOS 6.2, sur un vieux Pentium.
Pour mon premier programme, j'ai voulu commencer simple: ouvrir et lire un fichier text.
Voilà mon bout de programme:

#include <stdio.h>
main (void)
{
                  FILE *MonFichier ;
                  char Filename[]: "c:\>log.txt" ;
                  MonFichier = fopen(Filename, "r") ;
}

Mais rien ne ce passe, et lorsque je fais alt+F9, dans l'éditeur de TurbC, il me dit que MonFichier n'est pas une variable utilisé dans la fonction main.
Ou est mon erreur?
Merci de votre aide!!!

22 réponses

Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 09:04
salut, j'aurais peut-être commencé par plus simple si c'est vraiment ton tout premier programme.

sinon tu fais un projet en mode console, je suppose ?

#include <stdio.h>
main (void)
{
                  FILE *MonFichier ;                        // pour le type FILE (qui est en fait un void) il faut inclure "stdlib.h" je crois
                  char Filename[]: "c:\>log.txt" ;         // ici il me semble que c'est plutôt : char Filename[] = "c:\log.txt" ou "c://log.txt"
                  MonFichier = fopen(Filename, "r") ;   // puisqu'il s'agit d'un fichier txt, tu peux mettre "rt" avec 't' pour texte
}

voilà bon courage

Loki
0
psicoblues Messages postés 7 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 16 juin 2007
14 juin 2007 à 09:59
Salut Loki!
Merci de ta réponse!

en fait c'est mon deuxième programme si on compte "hello world" lol

Oui c'est un projet en mode console, qui me permétra de voir le nombre de licences distribué par mon serveur.

J'ai essayé tes commentaires mais celà ne résou rien...
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 10:10
le listing des erreurs exact c'est quoi ?
dans ton premier post, tu as mis ton code intégral ?

tu veux pas passer sur windows xp ? lol, parce que DOS c'est bien mignon, mais tu vas pas aller loin avec ça.
t'as essayé de voir s'il pouvait pas y avoir des problèmes de compatibilité ?

Loki
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 10:14
au fait je suis un boulet, j'ai inversé / et \.

donc je la refais : soit c:/log.txt soit c:\\log.txt car \ est le symbole qui prévient qu'il va y avoir un autre caractère pour former un caractère spécial : \0    \t    \n   \r

Loki
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 10:16
et je t'ai dit une connerie, tu n'as pas besoin de stdlib et FILE n'est pas un void ! j'ai été induit en erreur par un projet spécial. désolé

Loki
0
psicoblues Messages postés 7 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 16 juin 2007
14 juin 2007 à 10:24
listing des ereurs:
Warning: "MonFichier" is assigned a value which is never used in function main.


oui c'est mon code intégrale, mais je pense que je vais le modifier par la suite avec une fonction while pour avoir un rafaichissement de l'affichage.

Mon serveur est sous winXP(c'est le seul, je suis linuxien avant tout, enfin un linuxien unitié non expert lol ), je pense que j'orais pû faire un script tout bête mais je veux me mettre au C par curiosité.

Un programme en C sous MSDOS devrait passer sur toutes les platformes windows, non?
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 10:32
je ne sais pas, je n'ai pas assez de bouteille pour cette question. En fait tu n'as pas d'erreur ? juste un warning ?

j'ai fait rapidement ceci : et ça marche nickel... mais en même temps je compile avec Visual Studio 2005, pas Turbo C sur MS-DOS

#include <stdio.h>
#include <conio.h>

void main ()
{
    FILE *MonFichier;
    char Filename[] = "c:/boot.ini";
    MonFichier = fopen(Filename, "r");
    char buffer[256];

    if (MonFichier)
    {
        while (fread(buffer,sizeof(char),255,MonFichier))
            printf(buffer);
        printf("\n");
    }
    else
        printf("fichier inconnu au bataillon\n");

    getch();
}

Loki
0
psicoblues Messages postés 7 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 16 juin 2007
14 juin 2007 à 11:07
en faite ma principale erreur est une erreur de compréhension du langage C, car je croyais que fopen m'ouvrais le fichier ET me l'affichais à l'écran et non, certe il m'ouvre le fichier mais de traite rien. Donc il faut que j'utilise une fonction qui m'affiche le contenu de mon fichier.

je teste de suite ton programme ;-)
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 juin 2007 à 14:13
TurboC avec MS_DOS ? Passe vite sous quelque chose de plus récent, ces "choses" date de l'âge de pierre.

Sinon, je ne recommande pas du tout la méthode de Loki1 pour lire un fichier. Je recommande de récupérer la taille d'abord, allouer la mémoire nécessaire, récupérer le contenue puis afficher.

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

int main (void)
{
    char *buffer;
    FILE *file;
    int size;

    if(!(file = fopen("fichier.txt", "r"))) return 0;

    fseek(file, 0, SEEK_END);
    size = ftell(file);
    fseek(file, 0, SEEK_SET);

    if((buffer = (char*)malloc(size+1))) {
        buffer[fread(buffer, size, 1, file)] = 0;

        printf("%s\n", buffer);

        free(buffer);
    }
    fclose(file);

    return 0;
}

Finalement, un bouquin de C serait aussi une très bonne chose (si tu n'en as pas déjà un).

C++ (@++)<!--
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 14:27
SAKingdom > il y a beaucoup de pertes en lisant comme je l'ai fait avec ma boucle while ?

je sais que je suis de mauvaise foi, mais en admettant que le fichier de psicoblues soit énorme, et vu que son pc marche à pédales, il vaut mieux faire par morceaux que tout d'un coup non ?

et pis tant que j'y suis, il me semble que c'est : fread(buffer, 1, size, file) et pas fread(buffer, size, 1, file)

Loki
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 juin 2007 à 14:41
Lire par bloque oui mais pas avec fgets. fgets s'arrêt à chaque \n ce qui peut faire perdre beaucoup de temps.
Tu alloues un buffer de taille raisonnable (32Ko) puis tu le remplis avec fread mais 256 est une taille ridicule.

Pour le fread, oui j'ai inversé le 2 et 3ème paramètre.

C++ (@++)<!--
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 14:44
ok pour les 32K j'ai toujours du mal parce que ça me parait beaucoup mais en réalité avec nos Giga d'aujourd'hui...

ceci dit je n'ai pas utilisé fgets non plus

Loki
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 juin 2007 à 14:51
Ah oups. D'habitude avec des tailles si petites, les gens on tendence à utiliser fgets.
32Ko, c'est minim pour la mémoire vive même avec de vieux PC.
Autre chose, ajoute un 0 de fin de chaine à buffer car ton prinf passera tout droit.

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 juin 2007 à 14:51
printf pardon.

C++ (@++)<!--
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 15:02
ouais je m'en suis rendu compte ne lisant ton code, et j'ai aussi oublié de faire un fclose(file)

Loki
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 15:04
mais fread ne le joint pas automatiquement ?
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 juin 2007 à 15:06
Non, car fread peut lire autre chose que des char.

C++ (@++)<!--
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 15:06
vu ! merci.

Loki
0
psicoblues Messages postés 7 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 16 juin 2007
14 juin 2007 à 15:46
j'ai un bouquin qui est :"le tout en poche, Le langage C de Tony Zhang"

mais justement, dans le bouquin c'est expliquer comment ouvrir un fichier mais ne précisait pas la différence entre ouvrir et afficher ;-)

des p'tits commentaires seraient le bienvenudans dans ton code :)

je n'ai pas trouvé encore une fonction qui me permetrais d'affiché juste un certain type de données.

car dans mon fichier tout ne m'intérersse pas, deplus il faut que le fichier reste ouvert avec rafraichissement pour voir les changements.

en faite ce qui m'intéresserais, ce n'est pas un truc tout pondu mais que l'on me guide vers quels fonctions allez voir...

merci :)
0
psicoblues Messages postés 7 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 16 juin 2007
14 juin 2007 à 15:50
et aussi je voulais préciser que le programme tournera sur un Pentim III 900mhz avec 512 de ram.

j'ai juste installé un TurboC sur un vieux coucou dédié à la programmation...
0