G
MasterCounter schrieb:
Diese Lösung ist mir ja bekannt, aber das verhaklten von fseek mit SEEK_END ist laut Standard undefiniert, darum wäre meine Lösung doch eigentlich sicherer oder?
Das ist aber imo ziemlich paranoid. Der Standard sagt ja nur soviel, dass eine Implementation von SEEK_END für binäre Streams nicht unterstützt werden muss, bzw in erwarteter Weise funktionieren wird. Mit Unix oder Windows wird man da aber kaum Probleme haben.
Ansonsten hilf dir vielleicht das weiter
So, to go back to the original question, the best chance of "portably"
obtaining the (physical) size of a file (in bytes) is:
long filesize(char *filename)
{
long size;
FILE *fp;
if ((fp = fopen(file, "r")) == NULL) return -2;
fclose(fp);
if ((fp = fopen(file, "ab")) == NULL) return -3;
size = ftell(fp);
fclose(fp)
return size;
}
Note that there are three error codes:
-1: ftell() has failed, check errno for further details
-2: the file doesn't exist or is read protected
-3: the file exists, but is write protected
Die Vorgehensweise hat aber einen nicht unerheblichen Nachteil, du brauchst Schreibzugriff.