binair en tekstbestand lezen in c

Status
Niet open voor verdere reacties.

jopie33

Gebruiker
Lid geworden
10 apr 2010
Berichten
30
Hallo,

Ik moet in c een bestand lezen. Het kan een tekstbestand zijn of een binair bestand, dat weet ik alleen niet van tevoren. Nu heb ik de volgende code geschreven die eigenlijk alleen voor het lezen van binaire bestanden is.

[CPP]
#include <stdio.h>

char *readFile(const char *filename){
char *buffer = NULL;

if(filename){
FILE *fp = fopen(filename, "rb");

if(fp){
fseek(fp, 0, SEEK_END);
size_t buffer_size = ftell(fp);

if(buffer_size){
rewind(fp);

buffer = (char*)malloc(sizeof(char) * (buffer_size + 1));
size_t chars_read = fread(buffer, sizeof(char), buffer_size, fp);

if(chars_read != buffer_size){
free(buffer);
buffer = NULL;
}

else buffer[buffer_size] = 0;
}
}
fclose(fp);
}

return buffer;
}

int main (int argc, char *argv[])
{
char *buffer = readFile("combined.scs");
if(buffer){
printf("%s", buffer);
free(buffer);
}

getch();
return 0;
}


[/CPP]

Toch blijkt dit ook voor tekstbestanden te werken(ik gebruik windows, en als compiler mingw gcc)

De vraag is dus: Kan ik deze code veilig gebruiken voor zowel binaire bestanden als textbestanden? En met veilig bedoel ik voor elke compiler, onder linux, windows, mac.
Zo niet, moet ik dan voor textbestanden een andere methode maken om deze in te lezen?
 
Binair en text zijn exact hetzelfde in de basis. Het verschil zit 'm in de interpretatie van bepaalde speciale tekens. In een text bestand verwacht je logische "regels" en dat data gegroepeerd is op een bepaalde manier. Bijvoorbeeld: een regel is alle tekst tot de volgende "enter". Ook kan de tekst op een bepaalde manier zijn gecodeerd, bijvoorbeeld voor internationale teksten.

Bij binair krijg je het ruwe formaat en is alle verdere interpretatie in principe de verantwoordelijkheid van de lezer.
 
Ok ik denk dat ik het begrijp. De code is waarschijnlijk voor zowel tekst als binaire bestanden te gebruiken. Ik ben de ascii codes nagegaan en in principe moeten alle karakters bij een tekstbestand tussen 32 en 127 liggen (en nog wat tekens als new line) en bij binaire bestanden kunnen deze tussen 0 en 255 liggen.
 
Ik ben de ascii codes nagegaan en in principe moeten alle karakters bij een tekstbestand tussen 32 en 127 liggen (en nog wat tekens als new line) en bij binaire bestanden kunnen deze tussen 0 en 255 liggen.

Als je die range aanhoudt dan moet je er wel rekening mee houden dat een signed char een range heeft tussen -128 en 127.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan