如何在swift

时间:2016-06-01 12:19:33

标签: swift symlink nsfilemanager symlink-traversal

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

  1. 测试是否有文件
  2. 以字符串
  3. 的形式阅读文件内容

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

    [编辑]关闭这个,因为下面的代码(我开始使用),实际上工作正常,只涉及多个级别的用户错误。感谢输入人员。

    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;
    }
    

1 个答案:

答案 0 :(得分: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