fileExistsAtPath API始终返回NO

时间:2011-07-04 19:38:47

标签: iphone objective-c cocoa-touch cocoa

以下是我的代码我需要检查文件目录中是否存在文件,但是以下API在任何情况下都不会返回true,但是文件目录中会创建文件。请检查我正在做的任何错误。我搜索过另一个说这个API“fileExistsAtPath”应该可以工作,但它在我的情况下不起作用。请帮帮我。

NSString *recordFile=[NSString stringWithFormat:@"MyFile.acc",data.uid];

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                          NSUserDomainMask, YES);
NSString *documentDr = [documentPaths objectAtIndex:0];     // WHY 0 ?
NSString *uniquePath = [documentDr stringByAppendingPathComponent:recordFile];

if([[NSFileManager defaultManager] fileExistsAtPath: uniquePath])
{

    NSLog(@"File found")

}
else {
    NSLog(@"No File to play");
}

谢谢, 索尼

5 个答案:

答案 0 :(得分:3)

可能你的路径不正确。您要查找的文件的名称应该是什么?如果您有@"MyFile1.acc"@"MyFile2.acc"等(其中1,2是data.uid值),请尝试使用此功能:

NSString *recordFile=[NSString stringWithFormat:@"MyFile%i.acc",data.uid];

答案 1 :(得分:1)

在定义uniquePath或

时,尝试在documentDr之后附加“/”
NSString *recordFile = [NSString stringWithFormat:@"MyFile%@", data.uid];
...
if([NSBundle pathForResource:recordFile ofType:@"acc" inDirectory:documentDr])

答案 2 :(得分:0)

我注意到的第一个错误是第一条指令。 为什么将'data.uid'作为参数传递给格式字符串?假设'data.uid'是某种整数,那么......中应该至少有'%d'。

我查看了Apple文档,特别是that statement,其中说

  

此方法返回的目录可能不存在。

您可以尝试使用NSFileManager方法获取当前目录路径,然后测试文件是否存在(或者在以后可以轻松检索的位置创建目录)。

其他路径怎么样?你写了'为什么0?',我问你同样的问题。尝试循环遍历数组元素,每次测试文件是否存在。

答案 3 :(得分:0)

代码应该有效。您的文件很可能不存在。保存时,您是否正确使用文件名中的大小写? 此外,我现在仍然不知道文件名是什么,正如已经说过的那样,你的初始帖子中的第一行没有给出正确的格式字符串。 在检查试图存在之前尝试:

[[NSString stringWithString:@"test"] writeToFile: uniquePath atomically:YES];

那应该在路径上创建一个文件,你看,fileExists有效。

答案 4 :(得分:0)

我尝试了很多东西,但结果是我不得不删除应用程序,清理所有目标,然后再次重建。奇怪的是,我的新资源不会被复制到应用程序。它通常发生在文件中,当我添加它们时,我选择了“为任何添加的文件夹创建文件夹引用”。