Я пытаюсь получить размер файла. Я использую 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, для двоичных файлов, но это обычные текстовые файлы.
Есть ли необходимость в реализации некоторых из этих решений, и если да, то почему? Должны ли функции работать правильно независимо от системы?