here f.Seek(i,SeekOrigin.End); Means that the cursor of stream seeks(or moves forward/backward) in this case when i=20 then the offset is 20 and start position is End of the Stream so finds nothing and whenever f.ReadByte() finds nothing to read it returns character no 65535|'.', hence u see ? symbols preceding the actual characters Now when i=-1 then the offset is -1 and start position is End of Stream, by -1 we mean that we have to move back in stream, so we first find z then y and so for this is what reverse movement of stream cursor
Hope this might help
