Nov 13, 2008 14:13
Замечательный класс .NET StreamReader делает две неочевидные вещи :
1) Флаг detectEncodingFromByteOrderMarks конструктора не влияет на наличие первых 3 байт в буфере, если они совпадут с unicode 0xEFBBBF.
2) DiscardBufferedData плюёт на загоны конструктора по этим трём байтам и тупо апит буфер с стрима
Что же получаем на выходе в MSVS2005?
StreamReader s = new StreamReader(someFile);
Первые два байта равны 0x0D0A
s.Seek(0, SeekOrigin.Begin);
Поскольку Seek всё равно на unicode, первые два байта равны 0xEFBB
а DiscardBufferedData в следствии 2-го пункта не меняет ситуацию => Никогда, никогда не юзайте StreamReader и Seek
Кстати, возможно мелкомягкие где-то это уже поффиксили ;)