erinnert mich irgendwie an was ^^
drum hab ich in meinen Dateifunktionen auch 'ne Prüfung mit drin, welche erstmal das Format ermittelt und dann auch noch die Markerbytes überspringt.
Delphi-Quellcode:
Function TextMode(Var F: TFile): TFileMode;
Var i: LargeInt;
L: LongChar;
R: LongInt;
Begin
F.RecSize_TextMode := fmANSI;
i := FilePos(F);
FilePos(F, 0);
ReadData(F.FileHandle, @L, 4, @R, nil);
If (R >= 4) and (L = $0000FEFF) Then F.RecSize_TextMode := fmUCS4
Else If (R >= 4) and (L = $FFFE0000) Then F.RecSize_TextMode := fmUCS4BE
Else If (R >= 2) and (Word(L) = $FEFF) Then F.RecSize_TextMode := fmUCS2
Else If (R >= 2) and (Word(L) = $FFFE) Then F.RecSize_TextMode := fmUCS2BE;
If (F.RecSize_TextMode = fmUCS2) or (F.RecSize_TextMode = fmUCS2BE) Then Begin
If i > 2 Then Inc(i) Else i := 2;
TLargeIntRec(i).Lo := TLargeIntRec(i).Lo and not 1;
End Else If (F.RecSize_TextMode = fmUCS4) or (F.RecSize_TextMode = fmUCS4BE) Then Begin
If i > 4 Then Inc(i, 3) Else i := 4;
TLargeIntRec(i).Lo := TLargeIntRec(i).Lo and not 3;
End;
FilePos(F, i);
Result := F.RecSize_TextMode;
End;
Aber hier ist ja anscheinend schon sicher, daß es sich um eine UnicodeDatei handelt, bleibt aber noch ungeklärt, ob BigEndian, oder LowerEndian kodiert und ob überhaupt ein Markerbyte vorhanden ist...
Ein Therapeut entspricht 1024 Gigapeut.