Почему метод tellp() возвращает не то значение которое ожидается?
Ввод вывод буферизирован flush IMHO делать нужно
"Пишу в него строку "test", все правильно, она пишется в конец файла" - вы это проверяли?