iPhone如果文件存在问题

时间:2011-09-22 13:09:03

标签: iphone objective-c file-exists

从我见过的所有例子中,我确实相信我做得对。这是我的代码:

NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
NSUserDomainMask, YES) objectAtIndex:0];
NSString* thisImage = [documentsPath stringByAppendingPathComponent:image_path];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:thisImage];

if (fileExists){
    hotel_image = [UIImage imageNamed:image_path];
}else{
    hotel_image = [UIImage imageNamed:@"hdrHotels.jpg"];
}

您可以假设“image_path”等于“images / hotels / thishotel.jpg”。

现在首先,每个人都理解,“hdrHotels.jpg”位于基本目录中。而“images / hotels / thishotel.jpg”是实际的子目录(蓝色folers)。我也尝试过使用:

NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *imagePath = [NSString stringWithFormat:@"/%@",image_path];
NSString* thisImage = [documentsPath stringByAppendingPathComponent:imagePath];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:thisImage];

在“images / hotels / thishotel.jpg”前添加前导“/”。在这两种情况下发生的是,无论图像是否存在,“if”语句都是假的。我不确定我做错了什么。任何帮助将不胜感激。

编辑:

我改变了:

NSString *imagePath = [NSString stringWithFormat:@"/%@",image_path];

为:

NSString *imagePath = [image_path stringByReplacingOccurrencesOfString:@"images/hotels/" withString:@""];

但那仍然无效。

我也尝试过:

NSFileManager* fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString* documentsDir = [paths objectAtIndex:0];
NSString* myFilePath = [NSString stringWithFormat:@"%@/%@", documentsDir, image_path];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:myFilePath];

没有运气。

  

---------------------------------- ANSWER ------------ --------------------

所以是的,我终于明白了。我不能回答我自己的问题,因为我还没有100名代表,但这是修复。

NSFileManager* fileManager = [NSFileManager defaultManager];
NSString *myFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:image_path];

BOOL fileExists = [fileManager fileExistsAtPath:myFilePath];

if (fileExists){
    hotel_image = [UIImage imageNamed:image_path];
}else{
    hotel_image = [UIImage imageNamed:@"hdrHotels.jpg"];
}

4 个答案:

答案 0 :(得分:0)

如果您将“实际子目录(蓝色文件夹)”和“基本目录”称为Xcode中的目录,则所有文件都将放在捆绑路径中而不是文档目录中。 而是文档目录中的文件是在执行期间由应用程序直接生成,复制或下载的文件。

答案 1 :(得分:0)

添加一个前导/到image_path,然后将其添加到documentPath会产生“docDir // imagePath”,文件系统会将其视为“docDir / imagePath”。正如viggio24所建议的那样,首先在resourceDir中搜索你的图像,然后在docDir中搜索。

答案 2 :(得分:0)

以下是四种不同的方式(临时/自定义路径,捆绑文件夹,文档文件夹和对文档文件夹的另一种访问形式)

// Temporary Path Folder (read/write files)
//
NSMutableString *tempPathFile = [[NSMutableString alloc] initWithCapacity:(NSUInteger)1024];
[tempPathFile setString:[NSTemporaryDirectory() stringByAppendingPathComponent:@"export.mov"]];


// Application Folder (read-only files)
//
NSString *systemDirectoryPath = [[NSString alloc] initWithString:[[NSBundle mainBundle] resourcePath]];


// Documents Folder (read/write files)
//
NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [[NSString alloc] initWithString:[filePaths objectAtIndex:0]];


// Another way to access Documents Folder (read/write files)
//
NSMutableString *documentsPath = [[NSMutableString alloc] initWithCapacity:(NSUInteger)1024];
[documentsPath setString:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]];

不确定代码的其余部分是什么,但是一些类调用的自动释放可以让你这样我通常为我自己的文件夹路径副本分配一个可变字符串

答案 3 :(得分:0)

现在我再次看到这个,我终于可以回答了:

NSFileManager* fileManager = [NSFileManager defaultManager];
NSString *myFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:image_path];

BOOL fileExists = [fileManager fileExistsAtPath:myFilePath];

if (fileExists){
    hotel_image = [UIImage imageNamed:image_path];
}else{
    hotel_image = [UIImage imageNamed:@"hdrHotels.jpg"];
}