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;