6

ファイルパスを文字列として持っています。したい:

  1. そこにファイルがあるかどうかをテストします
  2. ファイルの内容を文字列として読み取る

私が抱えている問題は、そのファイル パスにシンボリック リンク (symlink) が含まれている場合があることです。多分ファイル自体に。おそらく、ファイルの上のディレクトリの1つに。

[編集]次のコード(私が始めたもの)は実際には問題なく動作するため、これを閉じます。複数レベルのユーザーエラーが含まれていました。入力していただきありがとうございます。

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 に答える