fileExistsAtPath:对于存在的文件返回NO

在我的代码fileExistsAtPath中的一个点:正在返回NO我确认存在的文件。 我一直在挠头,不知道为什么它不工作,所以把它改为这个代码,因为这个目录完全存在,但如果它不被创build。

NSError* err = nil; NSURL *dir = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create: YES error:&err]; BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:[dir absoluteString]]; 

运行此代码后,应用程序目录文件夹存在,并且err为0,但存在为否。

怎么会这样?

TIA

你应该使用[dir path] ,而不是[dir absoluteString]

我几个小时就把我的头撞在墙上。 显然,在xcode的每一个运行中,应用程序目录path都在改变。 它的UUID部分。 因此,而不是存储完整path我结束了坚持path后缀和前缀与任何存储类暗示:临时,caching或文件: – [

path和url有区别。 unix表示中的path是您的特定文件或目录所在的位置。 像"/Users/username/Desktop/myfile.txt"

一个url不仅包含位置,而且还包括scheme,例如:http://或https://,在我们的例子中是一个文件url (file:///Users/username/Desktop/myfile.txt)

fileExistsAtPathremoveItemAtPath这样的方法需要参数中的path而不是url。

而像copyItemAtURL:toURL:error:(NSError * _Nullable *)error需要一个url。

使用NSURL对象的path属性来检索path。 absoluteString为您提供了该scheme的path。