Я пишу модуль C и столкнулся с интересной проблемой, которую я никогда раньше не видел.
// Many other operations before this point
fseek(samples_file, 0, SEEK_SET);
printf("ftell A1 %llu\n", ftell(samples_file));
count = fwrite(channel_buffer+chan_type.size*set_index, 1, chan_type.size, samples_file);
printf("count %llu\n", count);
printf("ftell A2 %llu\n", ftell(samples_file));
// Many more operations to come after this point
Когда я запускаю модуль, я получаю распечатку, подобную следующей:
ftell A1 0
count 8
ftell A2 6018
Я установил указатель файла в самом начале файла. Когда я записываю некоторые данные, они должны записывать данные в той позиции, которую я ищу, и затем увеличивать позицию файла на количество записанных байтов (в данном случае 8). Тем не менее, когда я делаю ftell, кажется, что позиция внезапно подскочила до 6018 (который, как оказалось, является исходным размером файла плюс 8).
Почему это происходит и как я могу предотвратить это поведение?
Похоже, файл был открыт в режиме добавления. Проверьте, что нет "a"
во втором аргументе fopen()
,
Других решений пока нет …