[3H]如何用最简单、最少的语句检查一个任意文件名的文件是不是文本文件?(50分)

  • 主题发起人 主题发起人 3h
  • 开始时间 开始时间
3

3h

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,最符合题意者得分。
 
你认为可能吗?文本文件呀!!!有什么格式!!!!
 
procedure TForm1.filelistbox1click(sender:TObject);
begin
edit1.text:=extractfileext(form1.filelistbox1.filename);
//获取文件扩展名
if edit1.text='txt' then showmessage('是文本文件')
else showmessage('不是文本文件')
end;
 
判断文本文件,你只要检测是否为Ascii文件即可!
论坛里有这样的函数,我懒得灌水了!
 
我的天,什么样的文件不是文本文件? .exe 也可以以文本方式打开的。 呵呵
 
当然是指纯文本,如HTML,TXT。
不过判断一个文件是不是纯文本不能通过文件名的扩展名进行判断,得看内容。
 
好象只有逐一读字符,判断是否是控制字符,如果没有一个控制字符,则说明是应该是文本
文件,如果有一个控制字符就肯定不是文本文件。
不过这种方法,如果是文件比较大的话,效率就够呛了。
 
教父说得没错,
 
教父的做法可以,而且文件比较大的话可能也不需要完全判断啊。
非文本文件的控制符号应该不会读到很大以后就会出现的。
 
用filesize,如果是有大小的就是文本文件
 
liangtianyi:啥意思?
 
正常文本文件应该只包含 0x09(TAB),0x0A, 0x0D, 0x20 到 0x7E,
并且 0x0A 和 0x0D 已 0x0D0A 形式成对出现(Unix下只用0x0A,并已0x0A结束)
GB2312 字符集中加入了 0xA0 - 0xFE, 成对出现显示简体中文
BIG5的我就不清楚了
UnionCode的文本文件就更不好说了....
现在又出现了 18030 超大字符集,又4字节汉字,你说这是不是文本文件?

最简单的办法就是从头到尾读一下,只要不包含 0x00 - 0x08, 0x0B, 0x0C,
0x0E - 0x1F, 0x7F, 0xFF 这些字符,那就是文本文件。

function isTextFile(FN: string):boolean;
var
F: TStream;
begin
Result:=True;
F:=TMemoryStream.Create;
F.LoadFromFile(FN);
for i:=0 to F.Size-1 do
if (PChar(F.Memory)+i)^ in [#$0..#$8, #$B, #$C, #$E..#$1F, #$7F, #$FF ] then begin
Result := False;
Break;
end;
F.Free;
end;
 
好了,太久了,不好意思。结束。
 
后退
顶部