Those two contradict each other; readStringUntil() reads text, not binary. Just imagine that your timestamp contains 0x0A (`\n') in one of its bytes or if your data (FirstByte, SecondByte etc.) contains that; the reading will stop too early.
But you treat it as binary? E.g. you receive the character '1' as one of the bytes; that is 0x31 and you send that to the shiftregister. Is that what you need? Or should it send 0x01 to the shift register?
I suggest that you study my functions ReadPatternFromFile() and WritePatternToFile() in post #5 if you need a binary approach. If you need a text approach, I suggest that you study Serial Input Basics - updated; the techniques for Serial can also be applied to SD card.