//+ Jonas Raoni Soares Silva //@ http://jsfromhell.com type TBreakType = ( btNone, btWin, btMac, btLin, btBin ); --------- function GetBreakType( const Filename: string; const MaxDataToRead: Cardinal = 5*1024 ): TBreakType; var FS: TFileStream; Buffer, BufferStart, BufferEnd: PChar; begin Result := btNone; if not FileExists( Filename ) then raise Exception.Create( 'GetBreakType: nome de arquivo inválido' ); try FS := TFileStream.Create( Filename, fmOpenRead ); GetMem( Buffer, MaxDataToRead+1 ); BufferEnd := ( Buffer + FS.Read( Buffer^, MaxDataToRead ) ); BufferStart := Buffer; BufferEnd^ := #0; except raise Exception.Create( 'GetBreakType: erro alocando memória.' ); end; try while Buffer^ <> #0 do begin if Result = btNone then if Buffer^ = ASCII_CR then begin if (Buffer+1)^ = ASCII_LF then begin Result := btWin; Inc( Buffer ); end else Result := btMac; end else if Buffer^ = ASCII_LF then Result := btLin; Inc( Buffer ); end; if Buffer <> BufferEnd then Result := btBin; finally FreeMem( BufferStart, MaxDataToRead+1 ); FS.Free; end; end;
You need to create an account or log in to post comments to this site.