VC实现
===============================================================
#include "sys/stat.h"
bool IsTextFile(const char * strFileName)
{
if(strFileName==NULL) return false;
struct stat f_stat;
if(stat(strFileName,&f_stat)==-1)
{
return false;
}
long lngFilesize=0;
lngFilesize=(long)f_stat.st_size;
if(lngFilesize<=0) return false;
FILE *ft=fopen(strFileName, "rb");
if(ft==NULL)
{
return false;
}
char btData[1];
long lngReadPos;
long lngMaxRead=40960;
if(lngMaxRead>lngFilesize) lngMaxRead=lngFilesize;
for(lngReadPos=1;lngReadPos<=lngMaxRead;lngReadPos++)
{
fread(&btData,1,1,ft);
if(btData[0]=='/0')
{
fclose(ft);
return false;
}
}
fclose(ft);
return true;
}
//调用:
void CIsTextFileProjectDlg::OnClick()
{
if(IsTextFile("c://新建.txt")==false)
{
AfxMessageBox("新建.txt 二进制文件");
}
else
{
AfxMessageBox("新建.txt 文本文件");
}
}
===============================================================
Delphi实现
===============================================================
function IsTextFile(const sFile: TFileName): boolean;
var
tfsFile:TFileStream;
lngReadPos:Longint;
lngMaxRead:Longint;
btData:Byte;
begin
result:=true;
tfsFile:=TFileStream.Create(sFile,fmOpenRead or fmShareDenyNone);
try
lngMaxRead:=40960;
if lngMaxRead>tfsFile.Size then lngMaxRead:=tfsFile.Size;
for lngReadPos:=1 to lngMaxRead do
begin
tfsFile.Read(btData,1);
if btData=0 then
begin
result:=false;
end
end;
finally
FreeAndNil(tfsFile);
end;
end;
//调用:
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
if IsTextFile(OpenDialog1.FileName) then
showmessage('是文本文件文件')
else
showmessage('是二进制文件')
end;
end;