получение длины файла с использованием stat () в C - PullRequest
0 голосов
/ 20 февраля 2012

У меня есть файл, длину которого я хотел получить с помощью функции stat () в приведенном ниже коде:

FILE *file = fopen(filename, "r");
 int filesize, i;


 if(file==NULL)
{
        printf("Could not open mea.dat!\n");
    return ; 
}

        struct stat st;
        stat(filename, &st);
        filesize = st.st_size;
  .........

, но когда я проверил размер файла, я получил значение 1504, хотя простосчитая численно, длина содержимого файла равна 101, и поэтому размер файла должен был быть также равен 102.где мне это не хватает?

Ответы [ 3 ]

1 голос
/ 13 марта 2014

где мне это не хватает?

Когда размер, возвращаемый stat(), и размер, полученный вами , считая численно (что бы это ни значило), различаются, есть вероятность, что ваш подсчет неверен.

1 голос
/ 13 марта 2014

Вам необходимо проверить возвращаемое значение stat(), прежде чем принять решение доверять значению в структуре

        if (stat(filename, &st)) exit(EXIT_FAILURE);
        filesize = st.st_size;
0 голосов
/ 21 февраля 2012

Является ли данный файл разреженным?

При разреженных файлах блоки данных отсутствуют на диске, но сообщаются командой ls -l. Вот пример разреженного файла:

ls -ls sparse
2 -rw-r--r-- 1 root sys 1048577 Feb 20 12:58 sparse

Самые левые 2 - это фактическое количество используемых блоков, 1088577 - это количество байтов, выделенных для файла (не все фактически находятся на диске). Так как 2 блока (обычно 1024 на ящике, который я сделал так) не складывают до 1058577, вы можете увидеть разреженный файл таким образом.

...