如何取得文件大小,类型及类型解释。(50分)

  • 主题发起人 主题发起人 dadabox
  • 开始时间 开始时间
D

dadabox

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做一个类型资源管理的东东,但得到一个文件名后,我如何得到他的文件大小,文件
类型、类型解释及修改时间,也就是打开一个文件夹后用详细资料能看到的所有东东。我
记得有一个API函数,但搞忘了。不要说用GetFileSize函数,我不想用那个。
谢谢哪位告诉我,急。搞定就给分。最好有代码过程。
 
size := FileSize(f); //文件长度
sText := ExtractFileExt(filename) ; //文件扩展名
Stext:=FormatDateTime('yyyy-mm-dd hh:nn:ss',FGetFileTime(filename,0)); //文件创建时间
Stext:=FormatDateTime('yyyy-mm-dd hh:nn:ss',FGetFileTime(filename,1)); //文件修改时间
Stext:=FormatDateTime('yyyy-mm-dd',FGetFileTime(filename,2)); //文件最后访问日期
 
我记得好像有个API函数抓出的数据中都包含了上面的内容,所以我不然单独用各个函数来
取得。
 
试试这个API函数
——————————————————————————————————
Function GetFileInformationByHandle Lib "kernel32" Alias "GetFileInformationByHandle"
(ByVal hFile As Long, lpFileInformation As BY_HANDLE_FILE_INFORMATION) As Long

【说明】
这个函数提供了获取文件信息的一种机制——在一个BY_HANDLE_FILE_INFORMATION结构中装载与文件有关的信息

【返回值】
Long,非零表示成功,零表示失败。会设置GetLastError

【参数】
hFile ---------- Long,文件的句柄

lpFileInformation - BY_HANDLE_FILE_INFORMATION,用于容纳文件信息的结构
 
1. 从搜索记录中判断是否是子目录。

 

function IsValidDir(SearchRec:TSearchRec):Boolean;

begin


if (SearchRec.Attr=16) and

(SearchRec.Name<>'.') and

(SearchRec.Name<>'..') then

Result:=True

else

Result:=False;

end;

2. 这是查询主体函数。

参数介绍:

Mainpath: 指定的查询目录。

Filename: 欲查询的文件。

Foundresult: 返回的含完整路径的匹配文件(可能有多个)。

如果有匹配文件,函数返回True,否则,返回False;

 

function SearchFile(mainpath:string;filename:string;

var foundresult:TStrings):Boolean;

var

i:integer;

Found:Boolean;

subdir1:TStrings;

searchRec:TsearchRec;

begin

found:=false;

if Trim(filename)<>'' then

begin

subdir1:=TStringList.Create;//字符串列表必须动态生成

//找出所有下级子目录。

if (FindFirst(mainpath+'*.*', faDirectory, SearchRec)=0) then

begin

if IsValidDir(SearchRec) then

subdir1.Add(SearchRec.Name);

while (FindNext(SearchRec) = 0) do

begin

if IsValidDir(SearchRec) then

subdir1.Add(SearchRec.Name);

end;

end;

FindClose(SearchRec);

//查找当前目录。

if FileExists(mainpath+filename) then

begin

found:=true;

foundresult.Add(mainpath+filename);

end;

//这是递归部分,查找各子目录。

for i:=0 to subdir1.Count-1 do

found:=Searchfile(mainpath+subdir1.Strings+

'/',Filename,foundresult)or found;

//资源释放并返回结果。

subdir1.Free;

end;

result:=found;

end;

若要大小等属性 可以从TsearchRec中取得 
 
说明一下,我的操作系统环境是win2000,好像没有"kernel32.dll"这个文件了吧?
 
唉,不就是 FindFirstFile 吗,传入的第二个参数作为变参返回一个 WIN32_FIND_DATA
结构,其中的 nFileSizeHigh,nFileSizeLow 两个成员就是了。
查一下帮助不就知道了:)
 
Beta,还有怎么取得文件类型解释呢?如DOC文件,其文件类型解释为"Microsoft Word文档"。
这个值在哪儿取得。
 
var
FileInfo: TSHFileInfo;
begin
ZeroMemory(@FileInfo, SizeOf(FileInfo));
SHGetFileInfo(PChar(Filename), 0, FileInfo, SizeOf(FileInfo), SHGFI_TYPENAME);
Result := FileInfo.szTypeName; // "Microsoft Word文档"...
 
不好意思,我犯了一个错误。
 
后退
顶部