2015-12-07 4 views
22

Как это возможно?NSFileManager.defaultManager(). FileExistsAtPath возвращает false вместо true

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

Вы можете распечатать каталог документов Func PrintDocument() { пусть pathToFile = NSSearchPathForDirectoriesInDomains (NSSearchPathDirectory.CachesDirectory, .UserDomainMask, правда) [0] сделать { пусть namesOfFile = попробовать Manager.contentsOfDirectoryAtPath (pathToFile) для имени в namesOfFile { печати ("имя: \ (имя)") } } поймать пусть ошибку в NSError { печати ("печать: \ (ошибка)") } } – kholl

+0

так, видимо, файл не существует. Как вы его сохраняете – kholl

ответ

48

Видимо ваша переменная path является NSURL (описывая путь к файлу). Для того, чтобы получить путь как строку, используйте path свойство, а не absoluteString:

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

absoluteString возвращает URL в виде строки, в том числе в file: схемы и т.д.

Пример:

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: //' like this: 'file: /// Users/kuna/...', путь просто возвращает '/ 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)) –

Смежные вопросы