2015-12-07 12 views
22

どうすれば可能ですか?NSFileManager.defaultManager()。fileExistsAtPathは、trueではなくfalseを返します。

let exists = NSFileManager.defaultManager().fileExistsAtPath(path.absoluteString) 
print("exists: \(exists)") //false 

これはpath.absoluteString

//file:///Users/kuna/Library/Developer/CoreSimulator/Devices/92BD140D-5C14-43C4-80D6-904BB9594ED6/data/Containers/Data/Application/5B818832-BB19-4047-A7F8-1487F36868D6/Documents/wishlists/68/147/128/IMG_0006.PNG 

であり、あなたはそれがあるべき場所、それがある見ることができます:

enter image description here

何が起こっていますか?

+0

あなたは{ がpathToFile = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory、.UserDomainMask、真)[0] がnamesOfFileは=名にManager.contentsOfDirectoryAtPath(pathToFile) を試してみましょう {やらせる)(のPrintDocument funcをドキュメントディレクトリを印刷することができますnamesOfFileに{ 印刷( "名:\(名)") }: } } – kholl

+0

ので、明らかにファイルが存在しない } catchがNSError { 印刷( "\(エラー)プリント")として、エラーをしましょう。どうすれば保存するのですか – kholl

答えて

48

どうやらあなたpath変数は、(ファイルパスを記述)NSURLです。 としてパスに文字列を取得するには、path財産ではなく、absoluteString使用:

if let filePath = path.path { 
    let exists = NSFileManager.defaultManager().fileExists(atPath: filePath) 
} 

absoluteStringfile:方式を含む、文字列形式でURLを返しますなど

例:

let url = NSURL(fileURLWithPath: "/path/to/foo.txt") 

// This is what you did: 
print(url.absoluteString) 
// Output: file:///path/to/foo.txt 

// This is what you want: 
print(url.path!) 
// Output: /path/to/foo.txt 
+2

印刷したときと全く同じなので、違いはありますか? –

+1

@BartłomiejSemańczyk違いはabsoluteStringには 'file:/// Users/kuna/...'のように 'file://'も含まれています。パスは単に '/ Users/kuna/...'を返します。 – BigHeadCreations

2

あなたはパスが存在するかどうかを確認したい場合は、パスに

をチェックする必要があります
let url = NSURL(string: "balabala") 

let path = url?.path 
//Check path 
+0

これはあなたは+1を持っていますが、より明確にすべきです。 if(FileManager.default.fileExists(atPath:url?.path.path)) –

関連する問題