CPlay/filesize.c
2025-09-07 21:19:37 +02:00

63 lines
1.2 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
/* Different ways to get filesizes, some are linux-specific (i think), some are posix */
void file_tell(void);
void file_stat(void);
void file_end(void);
int main(void) {
file_stat();
file_tell();
file_end();
return EXIT_SUCCESS;
}
/* This works on linux, but may not be posix compliant */
void file_stat(void) {
const char *filename = "filesize.c";
struct stat st;
if (stat(filename, &st) == 0) {
printf("File size: %lld bytes\n", (long long)st.st_size);
} else {
perror("stat");
}
}
/* This works on all posix systems afaik */
void file_tell(void) {
FILE *f = fopen("filesize.c", "rb");
if (!f) {
perror("fopen");
return;
}
fseek(f, 0, SEEK_END);
long size = ftell(f);
fclose(f);
if (size >= 0) {
printf("File size: %ld bytes\n", size);
} else {
perror("ftell");
}
}
/* This is bad for obvious reasons*/
void file_end(void) {
FILE *f = fopen("filesize.c", "rb");
if (!f)
return;
size_t size = 0;
while (fgetc(f) != EOF) {
size++;
}
fclose(f);
printf("File size: %zu bytes\n", size);
}