The Source/Sink model is not really equipped for the requirement. Pipelines can move forward when processing messages; they cannot move backwards or backtrack. Or put another way, its not possible to Seek(...) backwards when processing messages.
You may be able to do it by mapping a view of the file. When you map a view of the file you get a pointer back that looks like a regular pointer, but its really a view of the file mapped by the OS. With pointers in hand, you can then use Sources/Sinks around those pointers.
In the bigger security engineering picture, you probably don't want the plain text file to be stored on the disk. Some drives are notoriously difficult to [keep] clean, and its next to impossible to clean the plain text once its written to storage. Most SSDs with write leveling fall into this category. Also see Reliably Erasing Data From Flash-Based Solid State Drives,
https://www.usenix.org/legacy/event/fast11/tech/full_papers/Wei.pdf
Jeff