写进行远程文件管理系统时,需要同时浏览本地和远程的文件列表,本地列表读取很简单,DELPHI下有Demos\DelphiWin32\VCLWin32\VirtualListView,读取本地已存在的文件夹或文件时,使用API函数SHGetFileInfo,第2个参数为0;读取不存在的文件类型时第2个参数区别为
FILE_ATTRIBUTE_NORMAL(文件),或FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_DIRECTORY(文件夹);
以下是关键代码
function GetUnknowFileInfo(const AFile: string; Attrs: DWORD): TSHFileInfo;
begin
fillchar(Result, sizeof(TSHFileInfo), 0);
if IsPathDelimiter(AFile, Length(AFile)) then
Attrs := Attrs or FILE_ATTRIBUTE_DIRECTORY;
SHGetFileInfo(PChar(AFile), Attrs, Result, SizeOf(TSHFileInfo),
SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES
or SHGFI_TYPENAME);
end;
procedure TForm1.SetListviewFile(typeName: string);
var
Info: TSHFileInfo;
begin
Info := GetUnknowFileInfo(pchar(typeName), FILE_ATTRIBUTE_NORMAL);
with ListView1.Items.Add do begin
ImageIndex := Info.iIcon;
Caption := Info.szDisplayName;
SubItems.add(Info.szTypeName);
end;
end;
效果如下: