fileExistsAtPath
和checkResourceIsReachableAndReturnError
都返回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
使用网址
检查文件可用性的最佳方法是什么?答案 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)
}];