如何在不知道 Swift3 中的用户名的情况下获取用户主目录路径(用户/“用户名”)

问题描述 投票:0回答:5

我正在制作一个函数来编辑 Users/johnDoe 目录中的文本文件。

let filename = "random.txt"
let filePath = "/Users/johnDoe"
let replacementText = "random bits of text"
do {

 try replacementText.write(toFile: filePath, atomically: true, encoding: .utf8)

}catch let error as NSError {
print(error: + error.localizedDescription)
}

但我希望能够拥有普遍的道路。有点像

let fileManager = FileManager.default
    let downloadsURL =  FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask).first! as NSURL
    let downloadsPath = downloadsURL.path

但对于 JohnDoe 文件夹。我一直无法找到有关如何执行此操作的任何文档。我能找到的最接近的东西是使用 NSHomeDirectory() 提到的。而且我不确定如何在这种情况下使用它。

当我尝试添加它时...

let fileManager = FileManager.default
    let downloadsURL =  FileManager.default.urls(for: NSHomeDirectory, in: .userDomainMask).first! as NSURL
    let downloadsPath = downloadsURL.path

我得到一个错误:

“无法将‘String’类型的值转换为预期的参数类型‘FileManager.SearchPathDirectory’”

我试过了 .NSHomeDirectory, .NSHomeDirectory(), NShomeDirectory, NShomeDirectory()

swift macos swift3
5个回答
39
投票

您可以使用 FileManager 属性homeDirectoryForCurrentUser

let homeDirURL = FileManager.default.homeDirectoryForCurrentUser

如果您需要它与早于 10.12 的操作系统版本一起使用,您可以使用

let homeDirURL = URL(fileURLWithPath: NSHomeDirectory())

print(homeDirURL.path)

5
投票

应该有一个更简单的方法,但——在最坏的情况下——这应该有效:

let filePath = NSString(string: "~").expandingTildeInPath

1
投票

Swift 5(可能更低)

let directoryString: String = NSHomeDirectory()
let directoryURL: URL = FileManager.default.homeDirectoryForCurrentUser

0
投票

macOS 13.0+; iOS 16.0+; iPadOS 16.0+:

URL.userDirectory

对于旧操作系统:

(即使在沙盒应用程序中也适用):

public extension URL {
    static var userHome : URL   {
        URL(fileURLWithPath: userHomePath, isDirectory: true)
    }
    
    static var userHomePath : String   {
        let pw = getpwuid(getuid())

        if let home = pw?.pointee.pw_dir {
            return FileManager.default.string(withFileSystemRepresentation: home, length: Int(strlen(home)))
        }
        
        fatalError()
    }
}


-2
投票

也许

FileManager.homeDirectoryForCurrentUser: URL

不过,它被列为 10.12 的“测试版”。

© www.soinside.com 2019 - 2024. All rights reserved.