1

私はObjective 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も取得します。パスをローカルファイルに変更した後も同じ結果になります。

4

1 に答える 1

3

あなたのパスはパスではなく、http プロトコルの URL です。

NSFileManagerファイルシステム ファイルに対してのみ機能します (URL ではなく、パスが必要です)。またNSFileManager、Cocoa でファイルのサイズを取得するために を使用することは推奨されなくなりました。

現在推奨される方法は、 を使用することNSURLです。ただし、それは「ファイル URL」でなければなりません (で作成します[NSURL fileURLWithPath:myPath])。「ファイル URL」の場合は、ファイル サイズなどの情報を使用getResourceValue:forKey:error:または取得できます。resourceValuesForKeys:error:

ただし、あなたの場合、パスはありませんが、http URL があります。http URL は、ファイルではなくリソースを参照します (リソースはファイルである場合とそうでない場合があります)。ファイルの場合、少なくともダウンロードを開始しない限り、そのサイズを知る方法はありません。サーバーの応答方法によっては、ダウンロードの開始時にサイズを知ることができる場合とできない場合があります。最悪の場合、ファイルを完全にダウンロードした後にしかサイズがわからないこともあります。

于 2012-09-19T21:32:35.320 に答える