Если вы не уверены, попробуйте!
Я только что написал этот тест.Я сгенерировал 10 000 файлов по 2 КБ каждый и прошел по всем из них, запрашивая размер их файлов.
Результаты на моей машине, измеренные с помощью команды "time" и выполненные в среднем 10 прогонов:
- версия fseek / fclose: 0,22 секунды
- версия статистики: 0,06 секунды
Итак, победитель (по крайней мере, на моей машине): stat !
Вот код теста:
#include <stdio.h>
#include <sys/stat.h>
#if 0
size_t getFileSize(const char * filename)
{
struct stat st;
stat(filename, &st);
return st.st_size;
}
#else
size_t getFileSize(const char * filename)
{
FILE * fd=fopen(filename, "rb");
if(!fd)
printf("ERROR on file %s\n", filename);
fseek(fd, 0, SEEK_END);
size_t size = ftell(fd);
fclose(fd);
return size;
}
#endif
int main()
{
char buf[256];
int i, n;
for(i=0; i<10000; ++i)
{
sprintf(buf, "file_%d", i);
if(getFileSize(buf)!= 2048)
printf("WRONG!\n");
}
return 0;
}