For the SAMD21 microcontroller I've bought the inner layer of abstraction is shared across most serial protocols, representing shared hardware.
Papyrix includes a support library providing some useful utils wrapping SDFat.h (which I'll explore later), adding error logging via another support library & minimizing how many Stream objects the caller has to juggle.
It includes methods for (de)initialization adding a flag for whether its initialized, recursive directory listings, ...
2/3?
... reads a file entirely into memory a KiB at a time, pipe a file into an output stream in chunks, read a file into caller-specified memory with trailing 0 byte, write a string to a file, create a directory if it doesn't exist with a few retries, open a file by iterating over its parent directory, check if a file exists in that way, some light abstractions upon that, & to delete a directory with all its descendants whilst invoking a callback to render progress.
3/3 Fin! Tomorrow: Logging!