Показать сообщение отдельно
Старый 21.11.2003, 15:51     # 5
SpacerV
Guest
 
Сообщения: n/a

ImitatoR
Числа 14..31 (0Eh..1Fh) не попадают в диапазон 32..126 (20h..7Eh).

Добавлено через 48 минут:
f00rd
Прока не длинная, так что помещаю на форуме:

Код:
function IsFileBinary(const FileName: string): boolean;
const
  BUF_SIZE = 4096;
var
  TargetFile: TFileStream;
  FileBuffer: array [0..BUF_SIZE-1] of byte;
  FileSize, BufSize, I: integer;
begin
  Result:=False;
  try
    TargetFile:=TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  except
    on E: Exception do
      raise Exception.CreateFmt('Не удалось открыть файл. '+
        'Дополнительная информация: "%s"', [E.Message]);
  end;
  FileSize:=TargetFile.Size;
  while TargetFile.Position<FileSize do
  begin
    BufSize:=TargetFile.Read(FileBuffer, BUF_SIZE);
    for I:=0 to BufSize-1 do
      case FileBuffer[I] of
        0..8, 11..12, 14..31, 255:
        { Для понимания текстовых файлов, созданных в старых редакторах,
          прийдется заменить пред. строку на:
        0..8, 14..25, 27..31, 255:}
        begin
          Result:=True;
          TargetFile.Free;
          Exit;
        end;
      end;
  end;
  TargetFile.Free;
end;

Последний раз редактировалось SpacerV; 21.11.2003 в 15:56.