Naja, ich würde es so machen:
Delphi-Quellcode:
repeat
b:=ReadByte;
if b in [10, 13] then
str:=str+chr(b)
else
break;
until (Stream zu Ende);
if b=13 then
begin
b:=ReadByte;
if b<>10 then
(Gehe ein Byte zurück);
end;
Das ganze funktioniert so: Du liest in den String, bis du auf ein Zeilenumbruchszeichen (#10 oder #13) triffst. Dann, am Ende, schaust du noch, ob danach noch ein #10 kommt, wenn davor ein #13 war, weil unter Windows ein Zeilenumbruch immer #13#10 ist, unter Unix aber #10 und unter Mac
OS <X #13 ist.