我正在制作一个函数来编辑 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()
您可以使用 FileManager 属性homeDirectoryForCurrentUser
let homeDirURL = FileManager.default.homeDirectoryForCurrentUser
如果您需要它与早于 10.12 的操作系统版本一起使用,您可以使用
let homeDirURL = URL(fileURLWithPath: NSHomeDirectory())
print(homeDirURL.path)
应该有一个更简单的方法,但——在最坏的情况下——这应该有效:
let filePath = NSString(string: "~").expandingTildeInPath
Swift 5(可能更低)
let directoryString: String = NSHomeDirectory()
let directoryURL: URL = FileManager.default.homeDirectoryForCurrentUser
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()
}
}
也许
FileManager.homeDirectoryForCurrentUser: URL
不过,它被列为 10.12 的“测试版”。