Возможно, у вас есть файл, который является пустым, кроме метки порядка байтов. Я думаю, TextReader.ReadToEnd()
уберет метку порядка байтов, давая вам пустую строку.
В качестве альтернативы, файл мог быть усечен между проверкой длины и чтением.
В целях диагностики я предлагаю вам записывать длину файла, когда вы получаете пустую строку.