Pb lecture dans un fichier en C

sophieeeeee Messages postés 1396 Date d'inscription   Statut Membre Dernière intervention   -  
juanpablo Messages postés 142 Statut Membre -
Bonjour à tous,
voila j'ai un probleme dans mon programme: voici mon code : int MessSpecInit(void)
{
void * buffer;
unsigned int size;
struct stat buf;
int f;
f =_open("essai.txt", _O_RDONLY, 0);
if(-1==stat("c:/essai.txt",&buf))
{
return(0);
}
else
{
printf("la taille du fichier est : %d octets",buf.st_size);
size = buf.st_size;
}
buffer= malloc(size);
_read(f,buffer,size);
printf("le fichier contient :%s",buffer);

}
et la ca bloque a cause de la fonction _read, je ne comprend pas pourquoi? quelqu'un aurait une idée???Merci d'avance
Configuration: Windows Vista
Internet Explorer 7.0

9 réponses

  1. shuya89 Messages postés 483 Statut Membre 39
     
    pk je ne voit pas de fopen ni de fread?
    0
  2. jostem
     
    il me semble que _read est une fonction et va donc retourner un résultat ( -1 en cas d'échec sinon le nombre de ligne )
    faire l=_read(...
    0
  3. sophieeeeee Messages postés 1396 Date d'inscription   Statut Membre Dernière intervention   53
     
    parce que C un peu compliqué : ce programme est destiné a du matériel embarqué donc je doit utilisé de sur la fonction _open après avec fread je n'y arrive pas.
    0
  4. sophieeeeee Messages postés 1396 Date d'inscription   Statut Membre Dernière intervention   53
     
    j'ai essayer comme ca:
    j=_read(f,buffer,size);
    mais ca ne marche toujours pas j'ai une erreur a la compilation qui dit:

    Debug assertion failed !
    Program :...
    Files: read.c
    Line : 85

    Expression : (fh >= 0 && (unsigned)fh <(unsigned)_nhandle)

    For information on how jour program can cause an assertion failure, see the visual C++ documentation on asserts.

    Je n'y comprend rien.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jostem
     
    La fonction _read attend un handle en premier paramètre, hors tu passes un int. Ca pourrait être ça
    0
  7. sophieeeeee Messages postés 1396 Date d'inscription   Statut Membre Dernière intervention   53
     
    merci pour vos réponses. j'ai amélioré mon programme je ne sais pas trop comment et ca mache maintenant:
    int MessSpecInit(void)
    {
    int f,j;
    void * buffer;
    unsigned int size;
    struct stat buf;

    f =_open("c:/essai.txt", _O_RDONLY,_S_IREAD );
    if (f == -1)
    {
    perror( "ouverture du fichier impossible\n" );
    }
    else
    {
    printf( "ok fichier ouvert\n");
    }
    if(-1==stat("c:/essai.txt",&buf))
    {
    return(0);
    }
    else
    {
    printf("la taille du fichier est : %d octets\n",buf.st_size);
    size = buf.st_size;
    }
    buffer= malloc(size);
    if( buffer ==NULL)
    {
    printf ("pas assez de memoire\n");
    }
    else
    {
    printf ("reservation memoire ok\n");
    }
    j=_read(f,buffer,size);
    if (j<= 0)
    {
    printf("erreur lecture\n");
    }
    else
    {
    printf("lecture ok\n");
    }
    printf("le fichier contient :%s\n",buffer);

    }

    mais lors du dernier printf a la fin ca m'affiche plein de caractère qui ne sont pas dans mon fichier.Pourquoi donc?
    0
  8. Francois Pé
     
    C'est quoi ton fichier? Il est en txt?
    0
  9. sophieeeeee Messages postés 1396 Date d'inscription   Statut Membre Dernière intervention   53
     
    oui
    0
  10. juanpablo Messages postés 142 Statut Membre 10
     
    salut
    le printf suppose que buffer est une chaine ( zéro final) ce qui n'est pas sûr
    vois avec buffer[size] = 0 avant printf et ajustes le malloc
    0