don*_*ale 5 macos file-handling swift macos-sierra macos-high-sierra
对于MacOS应用程序,Swift 4最简单的方法是找到重要的用户目录,例如:桌面,文档,下载等?
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)
Run Code Online (Sandbox Code Playgroud)
有两种方法可以从FileManager类中获取此信息:
func urls(for directory: FileManager.SearchPathDirectory,
in domainMask: FileManager.SearchPathDomainMask) -> [URL]
Run Code Online (Sandbox Code Playgroud)
返回所请求域中指定公用目录的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
Run Code Online (Sandbox Code Playgroud)
在域中找到并可选地创建指定的公共目录。
文档:https : //developer.apple.com/documentation/foundation/filemanager/1407693-url
在https://developer.apple.com/documentation/foundation/filemanager.searchpathdomainmask中定义的有效域为:
.userDomainMask:用户的主目录-安装用户个人物品(〜)的位置。
.localDomainMask:当前机器本地的-安装此机器上每个人都可用的项目的位置。
.networkDomainMask:局域网中公共可用的位置-安装网络(/ Network)上可用项目的位置。
.systemDomainMask:由Apple提供-无法修改(/ System)。
.allDomainsMask:所有域。
directory在https://developer.apple.com/documentation/foundation/filemanager.searchpathdirectory中定义的参数有很多可能性:
.applicationDirectory:受支持的应用程序(/应用程序)。
.demoApplicationDirectory:不支持的应用程序和演示版本。
.developerApplicationDirectory:开发人员应用程序(/ Developer / Applications)。
.adminApplicationDirectory系统和网络管理应用程序。
.libraryDirectory:各种用户可见的文档,支持和配置文件(/库)。
.developerDirectory:开发人员资源(/ Developer)。
.userDirectory:用户主目录(/用户)。
.documentationDirectory:文档。
.documentDirectory:文档目录。
.coreServiceDirectory:核心服务(系统/库/ CoreServices)的位置。
.autosavedInformationDirectory:用户自动保存的文档的位置(库/自动保存信息)。
.desktopDirectory:用户桌面目录的位置。
.cachesDirectory:可丢弃缓存文件(库/缓存)的位置。
.applicationSupportDirectory:应用程序支持文件的位置(库/应用程序支持)。
.downloadsDirectory:用户下载目录的位置。
.inputMethodsDirectory:输入法(库/输入法)的位置。
.moviesDirectory:用户电影目录(〜/ Movies)的位置。
.musicDirectory:用户的音乐目录(〜/音乐)的位置。
.picturesDirectory:用户图片目录的位置(〜/图片)。
.printerDescriptionDirectory:系统的PPD目录(库/打印机/ PPD)的位置。
.sharedPublicDirectory:用户的公共共享目录(〜/公共)的位置。
.preferencePanesDirectory:与系统偏好设置一起使用的PreferencePanes目录的位置(库/ PreferencePanes)。
.applicationScriptsDirectory:用于调用应用程序的用户脚本文件夹的位置(〜/ Library / Application Scripts /),
.itemReplacementDirectory:传递给FileManager方法url(for:in:appropriateFor:create:)以创建临时目录。
.allApplicationsDirectory:所有可以出现应用程序的目录。
.allLibrariesDirectory:可能发生资源的所有目录。
.trashDirectory:回收站目录的位置。
您可以使用 FileManager urls 方法
func urls(for directory: FileManager.SearchPathDirectory, in domainMask: FileManager.SearchPathDomainMask) -> [URL]
Run Code Online (Sandbox Code Playgroud)
并传递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!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2390 次 |
| 最近记录: |