6

我有一个文件路径作为字符串。我想要:

  1. 测试那里是否有文件
  2. 以字符串形式读取文件内容

我遇到的问题是有时该文件路径涉及符号链接(符号链接)。也许是文件本身。也许到文件上方的目录之一。

[编辑] 关闭它是因为以下代码(我开始使用)实际上工作得很好,只涉及多个级别的用户错误。感谢输入的人。

func getUserResource(relativeFilePath: String) -> String? {
    let fileManager = NSFileManager.defaultManager()

    let userFilePath = NSHomeDirectory() + relativeFilePath

    if(fileManager.fileExistsAtPath(userFilePath))
    {
        do {
            return try String(contentsOfFile: userFilePath, encoding: NSUTF8StringEncoding);
        } catch {
            return nil;
        }
    }
    return nil;
}
4

1 回答 1

3

如果您不确定符号链接是否指向文件或目录,您应该使用fileExistsAtPath(path:, isDirectory:). fileExistsAtPath将始终返回true符号链接,因为从技术上讲,该路径有一个文件。通过将布尔指针传递给isDirectory,您可以按照符号链接指向文件或目录:

假设symlinkToSomeFile是一个文件symlinkToSomeDir的符号链接并且是一个目录的符号链接。

let symlinkFilePath = NSHomeDirectory() + "/temp/symlinkToSomeFile"
let symlinkDirPath = NSHomeDirectory() + "/temp/symlinkToSomeDir"

var fileCheck: ObjCBool = false
var dirCheck: ObjCBool = false

print(fileManager.fileExistsAtPath(symlinkFilePath, isDirectory: &fileCheck)) // true
print(fileCheck) // false
print(fileManager.fileExistsAtPath(symlinkDirPath, isDirectory: &dirCheck)) // true
print(dirCheck) // true
于 2016-06-03T14:18:20.020 回答