Когда FileStream возвращает 0, это не значит, что вы достигли конца файла. Я имел опыт этого.
Из MSDN:
Общее количество байтов, считанных в буфер. Это может быть меньше количества запрошенных байтов, если это число байтов в данный момент недоступно , или ноль, если достигнут конец потока.
Это происходит на медленном устройстве, таком как thumbdrive.