Почему использование fseek () и ftell () возвращает неправильный размер файла? - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь получить размер файла. Я использую fseek для перехода к концу файла и ftell для возврата размера файла. Но после сравнения возвращенного размера файла с фактическим размером файла возвращаемое значение больше.

Это позже приводит к тому, что я читаю больше символов, чем есть в файле, в результате чего содержимое файла следует за бессмысленными символами.

// Open file
FILE* file= fopen(path, "r");

// Retrieve length
fseek(file, 0, SEEK_END);
long length = ftell(file);
rewind(file);

После этого я продолжаю читать файл.

// Create buffer and read file contents
char* source= (char*)malloc(length + 1);
if(source != nullptr)
{
    fread(source, 1, length, file);
    source[length] = '\0';
}
fclose(file);

В результате получается строка символов, которая заканчивается следующими символами

ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ

Я нашел сайт , объясняющий, что функции ftell и fseek не работают корректно в системах, отличных от POSIX, для двоичных файлов, но это обычные текстовые файлы.

Есть ли необходимость в реализации некоторых из этих решений, и если да, то почему? Должны ли функции работать правильно независимо от системы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...