Wie kann ich die Größe einer Datei herausfinden, die ich mit einer in C geschriebenen Anwendung geöffnet habe? Ich möchte die Größe wissen, weil ich den Inhalt der geladenen Datei in einen String schreiben möchte, den ich mit malloc()
. Einfach schreiben malloc(10000*sizeof(char));
ist IMHO eine schlechte Idee.
Antworten
Zu viele Anzeigen?
Pat Morin
Punkte
99
Haben Sie in Erwägung gezogen, die Dateigröße nicht zu berechnen und das Array bei Bedarf einfach zu vergrößern? Hier ist ein Beispiel (ohne Fehlerprüfung):
#define CHUNK 1024
/* Read the contents of a file into a buffer. Return the size of the file
* and set buf to point to a buffer allocated with malloc that contains
* the file contents.
*/
int read_file(FILE *fp, char **buf)
{
int n, np;
char *b, *b2;
n = CHUNK;
np = n;
b = malloc(sizeof(char)*n);
while ((r = fread(b, sizeof(char), CHUNK, fp)) > 0) {
n += r;
if (np - n < CHUNK) {
np *= 2; // buffer is too small, the next read could overflow!
b2 = malloc(np*sizeof(char));
memcpy(b2, b, n * sizeof(char));
free(b);
b = b2;
}
}
*buf = b;
return n;
}
Dies hat den Vorteil, dass es auch bei Streams funktioniert, bei denen es unmöglich ist, die Dateigröße zu ermitteln (wie bei stdin).
Ben Combee
Punkte
16303
Wenn Sie unter Linux arbeiten, sollten Sie ernsthaft in Erwägung ziehen, nur das Programm g_file_get_contents Funktion von glib. Sie übernimmt den gesamten Code für das Laden einer Datei, die Zuweisung von Speicher und die Fehlerbehandlung.
plan9assembler
Punkte
2876
- See previous answers
- Weitere Antworten anzeigen