BCB中如何得到文件的信息?例如大小类型修改时间等

crm2000 2001-06-27 11:19:19
感觉好麻烦,我现在用的方法是API获得WIN32_FIND_DATA结构,查注册表.这些方法太麻烦,各位有什么好办法吗?
...全文
426 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
crm2000 2001-06-29
  • 打赏
  • 举报
回复
楼上用的方法和WIN32_FIND_DATA差不多,也只能得到大小和时间等信息,没法得到类型信息,例如doc文件,在资源管理器中会说明这种文件是Microsoft Word文档,我所要得到的类型信息就是这个.有什么办法吗?
火鸟33 2001-06-28
  • 打赏
  • 举报
回复
还不睡??
crm2000 2001-06-28
  • 打赏
  • 举报
回复
有C++的版本吗?我改写了一下,可是总是没法得到信息.在GetFileVersionInfoSize调用时老是返回0.
wjzhuang 2001-06-28
  • 打赏
  • 举报
回复
有过类似的贴子,你查询"文件“看看
crm2000 2001-06-28
  • 打赏
  • 举报
回复
帮帮忙啊
zygapi 2001-06-28
  • 打赏
  • 举报
回复
CString strFileName;
m_FileList.GetLBText(m_FileList.GetCurSel(),strFileName);
HFILE hFile;
OFSTRUCT ofstruct;
ofstruct.cBytes=sizeof(OFSTRUCT);
BY_HANDLE_FILE_INFORMATION FileInfo;
SYSTEMTIME systemtime;
hFile=OpenFile(strFileName,&ofstruct,OF_READ);
if(hFile==HFILE_ERROR)
return;
GetFileInformationByHandle((HANDLE)hFile,&FileInfo);
CloseHandle((HANDLE)hFile);

FileTimeToSystemTime(&FileInfo.ftCreationTime,&systemtime);
此段代码,在VC下编的,凑合这看吧,其中FileInfo中就有你要的内容
crm2000 2001-06-28
  • 打赏
  • 举报
回复
还早,还要看比赛呢,哪位帮忙噢?
Sephil 2001-06-27
  • 打赏
  • 举报
回复
这是一个简单的函数,你可以使用一个 VersionInfo 数组元素作为参数。
Label1.Caption := GetFileInfo('c:\windows\explorer.exe', VersionInfo[3]);
or
Label1.Caption := GetFileInfo('c:\windows\explorer.exe', 'FileVersion');


===============================================
unit lFilever;
interface
uses
WinTypes, WinProcs, SysUtils {$IFNDEF WIN32} ,Ver {$ENDIF};
const
VersionInfo: array [1..8] of string = (
'CompanyName', 'FileDescription', 'FileVersion', 'InternalName',
'LegalCopyRight', 'OriginalFileName', 'ProductName', 'ProductVersion');

function GetFileInfo(FName, InfoType: string): string;

implementation

function GetFileInfo(FName, InfoType: string): string;
var
Info : Pointer;
InfoData : Pointer;
InfoSize : LongInt;
InfoLen : {$IFDEF WIN32} DWORD;{$ELSE} LongInt; {$ENDIF}
DataLen : {$IFDEF WIN32} UInt; {$ELSE} word; {$ENDIF}
LangPtr : Pointer;
begin
result:=''; DataLen:=255;
if Length(FName)<=0 then exit;
FName:=FName+#0;
InfoSize:=GetFileVersionInfoSize(@Fname[1], InfoLen);
if (InfoSize > 0) then
begin
GetMem(Info, InfoSize);
try
if GetFileVersionInfo(@FName[1], InfoLen, InfoSize, Info) then
begin
if VerQueryValue(Info,'\VarFileInfo\Translation',LangPtr, DataLen) then
InfoType:=Format('\StringFileInfo\%0.4x%0.4x\%s'#0,[LoWord(LongInt(LangPtr^)),
HiWord(LongInt(LangPtr^)), InfoType]);
if VerQueryValue(Info,@InfoType[1],InfoData,Datalen) then
Result := strPas(InfoData);
end;
finally
FreeMem(Info, InfoSize);
end;
end;
end;

end.

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧