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

时间:2012-02-16 00:36:08

标签: ios

在我的代码fileExistsAtPath:中的某一点为我已确认存在的文件返回NO。我一直在摸不着头脑,无法弄清楚为什么它不起作用,所以把它改成了这个代码,因为这个目录绝对存在但是如果它不会被创建的话。

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,但存在为NO。

这怎么可能?

TIA

3 个答案:

答案 0 :(得分:133)

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

答案 1 :(得分:4)

我把头靠在墙上几个小时。显然,在xcode中的每次运行中,app目录路径都在变化。 UUID的一部分。 因此,不是存储完整路径,而是最终保持路径后缀 并使用隐含的任何存储类作为前缀:临时,缓存 或文件: - [

答案 2 :(得分:1)

路径和网址之间存在区别。 unix表示中的路径是您的特定文件或目录所在的位置。与//Clicks the first result webDriver.findElement(By.xpath(".//div[@id='rso']/div[1]/div/div[1]/div//h3[1]/a")).click();

一样

一个网址不仅包含位置,还包含方案,例如:http://或https://,在我们的例子中是文件网址"/Users/username/Desktop/myfile.txt"

(file:///Users/username/Desktop/myfile.txt)fileExistsAtPath等方法需要参数中的路径而不是网址。

虽然像removeItemAtPath这样的方法需要网址。

使用copyItemAtURL:toURL:error:(NSError * _Nullable *)error对象的path属性来检索路径。 NSURL为您提供了该计划的路径。