如何在Delphi 2009中獲取文件的所有者?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;
...這對於這個公司名稱屬性工作正常,但我也不怎麼讓業主。
此外,當我嘗試對文件使用相同的方法時,沒有文件版本號,GetFileVersionInfoSize
不起作用,這是有道理的,因爲該文件沒有版本號在所有。
GetFileVersionInfoSize
還有另外一種方法來獲取文件的所有者嗎?我不是很習慣windows apis,所以我真的不知道這是否是實現我想要的東西的正確方式(獲取所有者的名字)。
這是您要的文件系統屬性? –
'GetFileVersionInfoSize()'返回0不是錯誤,除非'GetLastError()'表示實際發生錯誤。即使'GetLastError()'返回0,'RaiseLastOSError()'總會引發'EOSError'異常。 –
@DavidHeffernan我拍了一張照片,不幸的是用葡萄牙語,但我認爲你可以理解:[圖片](https:/ /puu.sh/uywsh/5f59bf2dc9.png) – Alisson