繁体   English   中英

Swift 4 macOS App - 如何查找重要的用户目录?

[英]Swift 4 macOS App - How to find the important users directories?

使用Swift 4为macOS应用程序找到重要用户目录的最简单方法是:桌面,文档,下载等?

TLDR:

let desktopDir = try? FileManager.default.url(for: .desktopDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let documentDir = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let downloadsDir = try? FileManager.default.url(for: .downloadsDirectory, in: .userDomainMask, appropriateFor: nil, create: false)

FileManager类获取此信息有两种方法:

这个:

func urls(for directory: FileManager.SearchPathDirectory, 
   in domainMask: FileManager.SearchPathDomainMask) -> [URL]

返回请求域中指定公共目录的URL数组。 [...]目录按照域掩码常量的顺序排序,首先是用户域中的项目,最后是系统域中的项目。

文档: https//developer.apple.com/documentation/foundation/filemanager/1407726-urls

(在@ leo-dabus的回答中已经提到了)

还有这个:

(我更喜欢,因为它更通用并返回单个URL)

func url(for directory: FileManager.SearchPathDirectory, 
  in domain: FileManager.SearchPathDomainMask, 
  appropriateFor url: URL?, 
  create shouldCreate: Bool) throws -> URL

找到并可选地在域中创建指定的公共目录。

文档: https//developer.apple.com/documentation/foundation/filemanager/1407693-url

任何一个:

https://developer.apple.com/documentation/foundation/filemanager.searchpathdomainmask中定义的有效域为:

.userDomainMask :用户的主目录 - 安装用户个人项目(〜)的位置。

.localDomainMask :本地机器的本地 - 安装本机上每个人可用的项目的地方。

.networkDomainMask :局域网中的公共可用位置 - 安装网络上可用项目的位置(/网络)。

.systemDomainMask :由Apple提供 - 无法修改(/ System)。

.allDomainsMask :所有域名。

directory参数有很多可能性,在https://developer.apple.com/documentation/foundation/filemanager.searchpathdirectory中定义:

.applicationDirectory :支持的应用程序(/ Applications)。

.demoApplicationDirectory :不支持的应用程序和演示版本。

.developerApplicationDirectory :开发人员应用程序(/ Developer / Applications)。

.adminApplicationDirectory系统和网络管理应用程序。

.libraryDirectory :各种用户可见的文档,支持和配置文件(/ Library)。

.developerDirectory :开发人员资源(/ Developer)。

.userDirectory :用户主目录(/ Users)。

.documentationDirectory :文档。

.documentDirectory :文档目录。

.coreServiceDirectory :核心服务的位置(系统/库/核心服务)。

.autosavedInformationDirectory :用户自动保存文档的位置(库/自动保存信息)。

.desktopDirectory :用户桌面目录的位置。

.cachesDirectory :可丢弃缓存文件的位置(库/缓存)。

.applicationSupportDirectory :应用程序支持文件的位置(库/应用程序支持)。

.downloadsDirectory :用户下载目录的位置。

.inputMethodsDirectory :输入法的位置(库/输入法)。

.moviesDirectory :用户电影目录的位置(〜/电影)。

.musicDirectory :用户音乐目录的位置(〜/音乐)。

.picturesDirectory :用户图片目录的位置(〜/图片)。

.printerDescriptionDirectory :系统PPD目录的位置(库/打印机/ PPD)。

.sharedPublicDirectory :用户的公共共享目录(〜/ Public)的位置。

.preferencePanesDirectory :PreferencePanes目录的位置,用于系统首选项(Library / PreferencePanes)。

.applicationScriptsDirectory :调用应用程序的用户脚本文件夹的位置(〜/ Library / Application Scripts /),

.itemReplacementDirectory :传递给FileManager方法url(for:in:appropriateFor:create:) .itemReplacementDirectoryurl(for:in:appropriateFor:create:)以创建临时目录。

.allApplicationsDirectory :可以发生应用程序的所有目录。

.allLibrariesDirectory :可以发生资源的所有目录。

.trashDirectory :垃圾目录的位置。

您可以使用FileManager URL方法

func urls(for directory: FileManager.SearchPathDirectory, in domainMask: FileManager.SearchPathDomainMask) -> [URL]

并为用户域掩码传递FileManager.SearchPathDirectory .desktopDirectory.documentDirectory.downloadsDirectory并获取返回的第一个url:

let desktopDirectory  = FileManager.default.urls(for: .desktopDirectory, in: .userDomainMask).first!
let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let downloadsDirectory = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask).first!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM