如何在 Delphi 2009 中获取文件的所有者?
我有一个函数可以获取文件属性,就像这样:
type
TCustomFileInfo= record
CompanyName,
Owner,
SpecialBuild: string;
procedure Clear;
end;
function GetFileInfo(const FileName: string): TCustomFileInfo;
type
PLandCodepage = ^TLandCodepage;
TLandCodepage = record
wLanguage,
wCodePage: word;
end;
var
dummy,
len: cardinal;
buf, pntr: pointer;
lang: string;
begin
len := GetFileVersionInfoSize(PChar(FileName), dummy);
if len = 0 then
RaiseLastOSError;
GetMem(buf, len);
try
if not GetFileVersionInfo(PChar(FileName), 0, len, buf) then
RaiseLastOSError;
if not VerQueryValue(buf, '\VarFileInfo\Translation\', pntr, len) then
RaiseLastOSError;
lang := Format('%.4x%.4x', [PLandCodepage(pntr)^.wLanguage, PLandCodepage(pntr)^.wCodePage]);
// Get Company's name, if available...
if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\CompanyName'), pntr, len){ and (@len <> nil)} then
result.CompanyName := PChar(pntr);
finally
FreeMem(buf);
end;
end;
...这个方法对于CompanyName属性很有效,但我不知道如何获取所有者。
此外,当我尝试使用相同的方法来处理一个没有文件版本号的文件时,GetFileVersionInfoSize
无法工作,这是有道理的,因为该文件根本没有版本号。
是否有GetFileVersionInfoSize
的替代方法或其他获取文件所有者的方法?我不太熟悉Windows API,所以我真的不知道这是否是实现我想要的内容(获取所有者名称)的正确方法。
GetFileVersionInfoSize()
返回0并不表示错误,除非GetLastError()
表示实际发生了错误。即使GetLastError()
返回0,RaiseLastOSError()
仍然会引发一个EOSError
异常。 - Remy Lebeau