蘋果表示,用於存放應用程序狀態存儲在「應用程序支持」文件夾中的文件,並以「使用應用程序支持目錄不變NSApplicationSupportDirectory」獲取德爾福MacOS的應用程序支持文件夾
Delphi的類對於TPATH方法有各種TPath.GetXXXX(包括TPath.GetLibraryPath的,但我無法找到一個返回的應用程序支持文件夾。
我怎樣才能獲得應用程序支持文件夾中Firemonkey應用程序嗎?
蘋果表示,用於存放應用程序狀態存儲在「應用程序支持」文件夾中的文件,並以「使用應用程序支持目錄不變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文件夾)有什麼關係遠不及應用程序支持文件夾。 –