| imho.ws |
![]() |
|
|
|
# 2 |
|
Guest
Сообщения: n/a
|
f00rd
Если я правильно понял вопрос, то вот такой есть вариант: анализировать файл побайтно до тех пор, пока не найдется один из символов #0..#8, #11..#12, #14..#31. Если символ с таким кодом найден, то файл двоичный, иначе - текстовый. Если этот вариант тебе подходит и нужна реализация его на Делфи - напиши. |
|
|
# 4 | |
|
::VIP::
Регистрация: 11.06.2003
Адрес: Там...
Сообщения: 236
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
SpacerV
Цитата:
|
|
|
|
|
|
# 5 |
|
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. |