Thank you, monarch_dodra. This looks like what I wanted.
I have a question:How come the function works with MmFile.opSlice's without appender(&)?
And is this reliable behavior?caesarCipher(cast(ubyte[]) inputFile.opSlice, cast(ubyte[]) outputFile.opSlice, 13);
Trying to use appender(&) on the casted opSlice's yields a "is not an lvalue" error.