Preferably something a bit like a stripped down std::FILE,
but less pointers, more RAII and more member functions,
and a few filesystem-like features.
Focusing only on moving bytes and files around, leaving character encoding to another library.
And it would be moveable, but not copyable,
and the file would close when the destructor is called,
so you can just let the file fall out of scope.
Or maybe the reading API and the writing API would be split into FileReader and FileWriter?
Actually yes, separate APIs for reading and writing is probably better to start with.
Mixing reading and writing can cause big headaches.