2010-06-04 4 views
3

Je suis reaing d'un fichier, et quand je l'ai lu, il faut compter ligne par ligne et les imprimelire le fichier en tant que tableau de caractères

ce que je veux exactement est que je veux un tableau de char tenant tous les caractères dans le fichier et l'imprimer une fois,

c'est le code que j'ai

if(strcmp(str[0],"@")==0) 
     { 
      FILE *filecomand; 
      //char fname[40]; 
      char line[100]; 
      int lcount; 
      ///* Read in the filename */ 
      //printf("Enter the name of a ascii file: "); 
      //fgets(History.txt, sizeof(fname), stdin); 

      /* Open the file. If NULL is returned there was an error */ 
      if((filecomand = fopen(str[1], "r")) == NULL) 
      { 
        printf("Error Opening File.\n"); 
        //exit(1); 
      } 
      lcount=0; 
      int i=0; 
      while(fgets(line, sizeof(line), filecomand) != NULL) { 
       /* Get each line from the infile */ 
        //lcount++; 
        /* print the line number and data */ 
        //printf("%s", line); 

      } 

      fclose(filecomand); /* Close the file */ 
+4

en double de [la lecture d'un fichier texte dans un tableau en c] (http://stackoverflow.com/questions/410943/lecture-un-fichier-texte-dans-un-tableau-en-c) –

+0

effectivement ce que je veux est le contenu du fichier texte entier est détenu dans un tableau char, pas pour l'impression ,, je veux utiliser le char de tableau plus tard –

+2

Nadeem, voir la réponse acceptée tha t il lié. C'est ce que tu veux. Fondamentalement, octets char * est le tableau dont vous parlez, et vous pouvez faire ce que vous voulez avec jusqu'à ce que vous le libérez. –

Répondre

2

une autre solution serait de cartographier le fichier entier à la mémoire et le traiter comme un tableau de caractères. Sous les fenêtres MapViewOfFile et sous unix mmap.

Une fois que vous avez mappé le fichier (beaucoup d'exemples), vous obtenez un pointeur vers le début du fichier dans la mémoire. Diffusez-le au char[].

0

Étant donné que vous ne pouvez pas supposer la taille du fichier, vous devez déterminer la taille, puis allouer dynamiquement un tampon.

Je ne publierai pas le code, mais voici le schéma général. Utilisez fseek() pour naviguer jusqu'à la fin du fichier, ftell() pour obtenir la taille du fichier, et fseek() pour déplacer le début du fichier. Allouer un tampon char avec malloc() en utilisant la taille que vous avez trouvé. L'utilisation de fread() pour lire le fichier dans le tampon. Lorsque vous avez terminé avec le tampon, libérez-le().

0

Utiliser un autre ouvert. c'est-à-dire

fd = open(str[1], O_RDONLY|O_BINARY) /* O_BINARY for MS */ 

L'instruction read serait pour un tampon d'octets.

count = read(fd,buf, bytecount) 

Cela fera un binaire ouvert et lu sur le fichier.

3

Vous devez déterminer la taille du fichier. Une fois que vous avez cela, vous pouvez allouer un tableau assez grand et le lire en un seul coup.

Il existe deux façons de déterminer la taille du fichier.

En utilisant fstat:

struct stat stbuffer; 
if (fstat(fileno(filecommand), &stbuffer) != -1) 
{ 
    // file size is in stbuffer.st_size; 
} 

Avec fseek et ftell:

if (fseek(fp, 0, SEEK_END) == 0) 
{ 
    long size = ftell(fp) 
    if (size != -1) 
    { 
     // succesfully got size 
    } 

    // Go back to start of file 
    fseek(fp, 0, SEEK_SET); 
} 
Questions connexes