Macos 如何为Mac OS X获取独立于用户的库路径?

Macos 如何为Mac OS X获取独立于用户的库路径?,macos,delphi,path,c++builder,c++builder-xe6,Macos,Delphi,Path,C++builder,C++builder Xe6,使用XE6,Embarcadero文档声明TPath::GetLibraryPath()“返回存储应用程序需要存储的任何数据的目录路径,,而不管用户是谁。” 然而,在示例路径表中,它们将此函数的OSX列为 /用户/用户名/库 这似乎是用户特有的。第一个问题是,不管用户是谁,这实际上是否是用于存储数据的正确文件夹。第二个问题是——如果不是的话——如何在OS X中将文件夹获取到用户非特定的库?我使用类似的方法来检索此文件夹 uses Macapi.Foundation, Macapi.Helpe

使用XE6,Embarcadero文档声明TPath::GetLibraryPath()“返回存储应用程序需要存储的任何数据的目录路径,,而不管用户是谁。”

然而,在示例路径表中,它们将此函数的OSX列为

/用户/用户名/库


这似乎是用户特有的。第一个问题是,不管用户是谁,这实际上是否是用于存储数据的正确文件夹。第二个问题是——如果不是的话——如何在OS X中将文件夹获取到用户非特定的库?

我使用类似的方法来检索此文件夹

uses
  Macapi.Foundation, Macapi.Helpers;

type
  ENSFileManagerException = class(Exception);

function GetFolder_ProgramData: string;
var
  FileManager: NSFileManager;
  ID: Cardinal;
  Domain: Cardinal;
  Url: NSURL;
  Bundle: NSBundle;
begin
  ID := NSApplicationSupportDirectory; // ProgramData on Windows
  Domain := NSLocalDomainMask;

  FileManager := TNSFileManager.Wrap(TNSFileManager.OCClass.defaultManager);
  Url := FileManager.URLForDirectory(ID, Domain, nil, False, nil);
  if URL <> nil then
    Result := NSStrToStr(Url.path)
  else
    raise ENSFileManagerException.CreateFmt('Could not retrieve folder for ID %d', [ID]); //Error.localizedDescription.UTF8String);
end;
使用
MaCAPI,基金会,MACAPI。
类型
ENSFileManagerException=类(异常);
函数GetFolder\u ProgramData:字符串;
变量
FileManager:NSFileManager;
ID:红衣主教;
域:基数;
网址:NSURL;
Bundle:NSBundle;
开始
ID:=NSApplicationSupportDirectory;//Windows上的程序数据
域:=NSLocalDomainMask;
FileManager:=TNSFileManager.Wrap(TNSFileManager.OCClass.defaultManager);
Url:=FileManager.URLForDirectory(ID,Domain,nil,False,nil);
如果URL为零,则
结果:=NSStrToStr(Url.path)
其他的
引发ENSFileManagerException.CreateFmt('无法检索ID为%d',[ID])的文件夹//错误.localizedDescription.UTF8String);
结束;

从文档:在Windows上,它指向包含可执行文件的文件夹。听起来真的很有用。人们确实对FMX感到好奇。Emba的能人难道没有受到任何牵连吗?不要使用TPath。不如编写一个函数,使用一些{$ifdef}代码返回所需的内容。我认为OSX定义返回的“/Library/YourCompany/AppName”可以由您自己生成,对于Windows端,您可能希望使用查找“c:\programData”或其等效项所需的任何
CSIDL\ucode>常量调用
SHGetSpecialFolderPath
,然后将“YourCompany\AppName”添加到该常量中。