获取德尔福MacOS的应用程序支持文件夹
苹果表示,用于存放应用程序状态存储在“应用程序支持”文件夹中的文件,并以“使用应用程序支持目录不变NSApplicationSupportDirectory”获取德尔福MacOS的应用程序支持文件夹
Delphi的类对于TPATH方法有各种TPath.GetXXXX(包括TPath.GetLibraryPath的,但我无法找到一个返回的应用程序支持文件夹。
我怎样才能获得应用程序支持文件夹中Firemonkey应用程序吗?
硬编码的方法(你可能已经尝试过);由于应用程序支持文件夹是库文件夹下:
uses System.IOUtils;
function GetApplicationSupportDir : string;
begin
Result := TPath.Combine(TPath.GetLibraryPath,'Application Support');
end;
或者,直接从iOS或OSX检索它:(有关的Delphi XE8和更高)
uses
Macapi.Helpers,
{$IFDEF iOS}
iOSapi.Foundation,
{$ENDIF}
{$IFDEF OSX}
Macapi.Foundation,
{$ENDIF}
System.IOUtils;
function GetApplicationSupportDir : string;
var
Paths : NSArray;
Dir : NSString;
begin
// For "Application Support" under the User's Library directory:
Paths := TNSArray.Wrap(NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, True));
// For "Application Support" under the System Library directory:
//Paths := TNSArray.Wrap(NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSSystemDomainMask, True));
Dir := TNSString.Wrap(Paths.objectAtIndex(0));
Result := NSStrToStr(Dir);
end;
对于XE7,这可能工作:
uses
Macapi.Helpers,
{$IFDEF iOS}
iOSapi.Foundation,
{$ENDIF}
{$IFDEF OSX}
Macapi.Foundation,
{$ENDIF}
System.IOUtils;
///////////////////////////// Added since XE7:
const
_PU = '_';
libFoundation = '/System/Library/Frameworks/Foundation.framework/Foundation';
type
NSUInteger = LongWord;
NSSearchPathDirectory = NSUInteger;
NSSearchPathDomainMask = NSUInteger;
function NSSearchPathForDirectoriesInDomains(directory: NSSearchPathDirectory; domainMask: NSSearchPathDomainMask;
expandTilde: Boolean): Pointer {NSArray}; cdecl;
external libFoundation name _PU + 'NSSearchPathForDirectoriesInDomains';
/////////////////////////////
function GetApplicationSupportDir : string;
var
Paths : NSArray;
Dir : NSString;
begin
// For "Application Support" under the User's Library directory:
Paths := TNSArray.Wrap(NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, True));
// For "Application Support" under the System Library directory:
//Paths := TNSArray.Wrap(NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSSystemDomainMask, True));
Dir := TNSString.Wrap(Paths.objectAtIndex(0));
Result := NSStrToStr(Dir);
end;
我确实想直接从OSX获取它,因为字符串“应用程序支持”在本地化时可能会有所不同。 我试过使用NSSearchPathForDirectoriesInDomains,但我无法在Macapi.Foundation中找到它,或者在任何用于Delphi XE7的OSX源文件中找到它。有不同的名字吗?或者可能在10.2中添加了? –
@MikeatBookup - 是的,它不在XE7中;它被添加到XE8中。我想出了需要什么,并为XE7创建了一个可能的解决方案。更新了答案。 –
这对你有帮助吗? http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.IOUtils.TPath.GetDocumentsPath。另外,如果您需要存储用户设置,请查看http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.IOUtils.TPath.GetHomePath –
@AlbertoMiola不知道与OP的问题(Documents文件夹)有什么关系远不及应用程序支持文件夹。 –