数据库存放的是blob类型的,通过文件头可以判断出文件类型,但是发现word和excel文件头都是一样的,另存的时候就不知道到底存成那种?试着用StgOpenStorage、ReadClassStg得到文件的CLSID,但是也不行。搞了半天了也没有结果。
解决方案 »
- 打包好的delphi系统,现在需要改数据库连接,需要改哪个文件呢?
- delphi7中在edit中敲enter(回車)的ascii不是13嗎?怎會事啊?想觸發的事情觸發不了?
- 没分了老大们!问题又比较急,急死人了。向各位高手求救!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- TWebBrowser编程可能大家都遇到,但有几人解决了?
- 菜鸟,请教各位高手,帮忙看看这段程序,不够再加~~~~~~~感激!!
- 改写在那个事件里面??
- 如何记录系统异常退出的时间并写入数据库?
- 哪里有Install Shield下载?
- 请问。。。菜鸟问题
- 奇怪的问题!!!
- delphi下如何读取和修改oracle数据库中的long型字段?
- odac不安装客户端连接oracle问题
那你就得分析两者的文件结构,你将数据库存储的数据拷贝到UltraEdit,十六进制模式下看看头、尾有没有规律可循,然后判读。
1 - word
2 - execl
...
other - 其它或者直接用8个字节记录后缀名。
xmoon1983: word和excel文件头都是一样的de410 :如果是excel的你保存成 a.doc,用Word打开就是乱码如果是word的你保存成 a.xls,用excel打开就是乱码也就是说可能第一条记录是word的,第二条记录是excel的,就解决不了
3楼都给了你方法了,看你还没解决,我补段代码function GetOfficeType(const filename: string): string;
var
f: TFileStream;
magic: Int64;
x: Cardinal;
s: string;
begin
Result := '';
try
f := TFileStream.Create(filename, fmOpenRead);
except
Exit;
end;
try
try
f.Seek(0, soFromBeginning);
f.Read(magic, SizeOf(magic));
if magic <> $E11AB1A1E011CFD0 then
Exit;
f.Seek(-484, soFromEnd);
ShowMessage(IntToStr(f.Position));
f.Read(x, SizeOf(x));
SetLength(s, x);
f.Read(s[1], x);
Result := s;
except
end;
finally
f.Free;
end;
end;
测试:
ShowMessage(GetOfficeType('c:\test.doc'));
要不你直接将其从数据库取出来.AsString,然后pos('Microsoft Word Document',str)>0就是Word:)