Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么可以';无法获取目标c中的文件大小?始终返回0_Objective C_Ios_Xcode - Fatal编程技术网

Objective c 为什么可以';无法获取目标c中的文件大小?始终返回0

Objective c 为什么可以';无法获取目标c中的文件大小?始终返回0,objective-c,ios,xcode,Objective C,Ios,Xcode,我是一个新的目标c,我尝试了很多小时,以找出如何获得文件大小,但我失败了,请帮助我,thx了很多 首先,我使用如下代码: NSString *yourPath = @"http://www.xxx.com.au/magazine/nm.pdf"; NSFileManager *man = [[NSFileManager alloc] init]; NSDictionary *attrs = [man attributesOfItemAtPath: yourPath error: nil]; un

我是一个新的目标c,我尝试了很多小时,以找出如何获得文件大小,但我失败了,请帮助我,thx了很多

首先,我使用如下代码:

NSString *yourPath = @"http://www.xxx.com.au/magazine/nm.pdf";
NSFileManager *man = [[NSFileManager alloc] init];
NSDictionary *attrs = [man attributesOfItemAtPath: yourPath error: nil];
unsigned long long result = [[attrs objectForKey: NSFileSize] unsignedLongLongValue];
NSLog(@"%llu", result);
输出为0

然后我试试这个:

NSString *yourPath = @"http://www.xxx.com.au/magazine/nm.pdf";
unsigned long long result = [[[NSFileManager defaultManager] attributesOfItemAtPath: yourPath error:nil] fileSize];
NSLog(@"%llu", result);

也得到0。更改本地文件的路径后得到相同的结果

您的路径不是路径,而是带有http协议的URL

NSFileManager
仅适用于文件系统文件(需要路径,而不是URL)。另外,使用
NSFileManager
不再是获得Cocoa格式文件大小的推荐方法

现在建议使用
NSURL
。但它必须是“文件url”(使用
[NSURL fileURLWithPath:myPath]
创建它)。如果是“文件url”,则可以使用
getResourceValue:forKey:error:
resourceValuesForKeys:error:
获取文件大小等信息


但是,在您的情况下,您没有路径,而是一个http URL。http URL指的是资源,而不是文件(资源可能是文件,也可能不是文件)。如果它是一个文件,如果不开始下载它,就无法知道它的大小。根据服务器的响应方式,在下载开始时可能知道大小,也可能不知道大小。在最坏的情况下,您只有在完全下载文件后才知道文件的大小。

您看到这些错误参数了吗?使用它们并记录它们。检查错误值。他们可能会返回事情无法正常工作的原因…您不必启动下载,正常的文件服务器应该将响应中的大小发送到http HEAD。HEAD类似于在获取数据之前启动下载并终止下载。它可能会也可能不会给出文件的长度。许多服务器只会给你一个传输编码而不是内容长度,然后你必须下载文件才能知道实际大小。Thx模拟,我会尝试nsurl,因为我有下载功能。