fileExistsAtPath和checkResourceIsReachableAndReturnError都不起作用

时间:2014-03-22 07:32:19

标签: ios objective-c nsfilemanager file-exists

fileExistsAtPathcheckResourceIsReachableAndReturnError都返回NO即使该文件存在于server URL

我在(本地)服务器中有一个文件    http://10.0.0.15/images/hibrise.png

  NSURL *url=[NSURL URLWithString:@"http://10.0.0.15/images/hibrise.png"];

BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:[url path]];
 NSLog(fileExists ? @"Yes" : @"No");

我已经检查了文件权限也没关系。 当我在浏览器中输入相同的URL时,它会显示图像

'fileExistsAtPath'此方法用于检查内部文件系统中的文件可用性

checkResourceIsReachableAndReturnError 这也适用于内部iOS文件系统This method is currently applicable only to URLs for file system resources. For other URL types, NO is returned Apple对fileExistsAtPath

使用网址

检查文件可用性的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

NSFileManager用于内部iOS文件系统。您无法使用NSFileMAnager检查远程文件是否存在。

使用类checkResourceIsReachableAndReturnError的方法NSURL代替。

答案 1 :(得分:0)

您无法使用NSFileManager类检查设备以外的位置的文件。

您需要使用的是NSURL方法- (BOOL)checkResourceIsReachableAndReturnError:(NSError **)error

NSURL *url=[NSURL URLWithString:@"http://10.0.0.15/images/hibrise.png"];
NSError *err;
BOOL fileExists = [url checkResourceIsReachableAndReturnError:&err];

如果出现错误,它将被传递给NSError指针,所以你也应该检查这个

正确答案是实际执行HTTP HEAD请求并检查404错误:

BOOL fileExists;
NSURL *url=[NSURL URLWithString:@"http://10.0.0.15/images/hibrise.png"];
    NSMutableURLRequest *headRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:30.0f];
    [headRequest setHTTPMethod:@"HEAD"];
    [NSURLConnection sendAsynchronousRequest:headRequest
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                               fileExists = ([(NSHTTPURLResponse *)response statusCode]!=404)
                           }];