Форум: "Основная";
Текущий архив: 2015.10.04;
Скачать: [xml.tar.bz2];
ВнизTPicture.LoadFromFile - интерпритация формата по содержимому. Найти похожие ветки
← →
brother © (2012-03-31 05:56) [40]мы говорим - сайт должен отвечать спецификации html!
они говорят - зачем? браузер же "кушает" наш код?!
зы. но всеж спецификация есть и ее надо придерживаться...
← →
Anatoly Podgoretsky © (2012-03-31 08:16) [41]Ну правильно говоришь, и большинство браузеров прощают это. Например по спецификации каждый тег <TEG> должен быть закрыт </TEG>, а в реальности не так и много хуже. Поэтому определять по сигнатуре HTML гнилое дело. При проверке нужна ветвь ELSE
← →
brother © (2012-03-31 19:48) [42]> по спецификации каждый тег <TEG> должен быть закрыт </TEG>
нет не каждый... например: Тег <IMG>
http://html.manual.ru/book/html/body/objects/img.phpне имеет конечного тега.
← →
Anatoly Podgoretsky © (2012-04-01 19:20) [43]</>
← →
brother © (2012-04-01 20:29) [44]> </>
это для XHTML
а для HTML закрывающий тэго не нужен...
← →
Unknown user © (2012-04-04 17:48) [45]Я когда-то давно писал собственную функцию для определения типа файла по сигнатуре. Если еще нужно, забирайте.
function DetermineFileType(const FileName:string; var DT:TDataType):boolean;
//елементы массива расположены в порядке
//уменьшения ошибки ложного определения типа файла
const ChkTypes:array[0..6] of TDataType=(dtRTF,dtIMG_EMF,dtIMG_BMP,
dtIMG_JPG,dtIMG_WMF,dtTXT,dtIMG_ICO);
var Stream:TFileStream;
Ind:integer;
function IsType(AType:TDataType):boolean;
const cRTFSignature="{\rtf1";
cBMPSignature="BM";
cJPGSignature="яШя";
cEMFSignature=" EMF";
MaxReadCnt=8192;
var Len,Cnt,TotalCnt:integer;
Sym,OldSym:Char;
S:string; Wrd:Word;
DWrd:LongWord;
begin
Result:=false;
Stream.Position:=0;
case AType of
dtRTF: begin
Len:=Length(cRTFSignature);
SetString(S,nil,Len);
Cnt:=Stream.Read(Pointer(S)^,Len);
if Cnt<>Len then exit;
Result:=S=cRTFSignature;
end;
dtTXT: begin
TotalCnt:=0; OldSym:=#0;
while TotalCnt<MaxReadCnt do
begin
Len:=SizeOf(Sym);
Cnt:=Stream.Read(Sym,Len);
if Cnt<>Len then exit;
if Sym=#10 then begin
Result:=OldSym=#13;
if not Result then exit;
end; {if}
OldSym:=Sym;
Inc(TotalCnt,Cnt);
end; {while}
end;
dtIMG_BMP: begin
Len:=SizeOf(Wrd);
Cnt:=Stream.Read(Wrd,Len);
if Cnt<>Len then exit;
Result:=Wrd=$4D42;
end;
dtIMG_JPG: begin
Len:=Length(cJPGSignature);
SetString(S,nil,Len);
Cnt:=Stream.Read(Pointer(S)^,Len);
if Cnt<>Len then exit;
Result:=S=cJPGSignature;
end;
dtIMG_WMF: begin
Stream.Seek(4,0);
Len:=SizeOf(Wrd);
Cnt:=Stream.Read(Wrd,Len);
if Cnt<>Len then exit;
Result:=(Wrd=$0300) or (Wrd=$0100);
end;
dtIMG_EMF: begin
Stream.Seek(40,0);
Len:=Length(cEMFSignature);
SetString(S,nil,Len);
Cnt:=Stream.Read(Pointer(S)^,Len);
if Cnt<>Len then exit;
Result:=S=cEMFSignature;
end;
dtIMG_ICO: begin
Len:=SizeOf(DWrd);
Cnt:=Stream.Read(DWrd,Len);
if Cnt<>Len then exit;
Result:=DWrd=$10000;
end;
end; {case}
end; {function IsType}
begin
Stream:=TFileStream.Create(FileName,fmOpenRead or fmShareDenyWrite);
try
Result:=false;
for Ind:=0 to High(ChkTypes) do
if IsType(ChkTypes[Ind]) then begin
DT:=ChkTypes[Ind];
Result:=true;
exit;
end;
finally
Stream.Free;
end;
end;
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2015.10.04;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.003 c