Нахождение размера файла - PullRequest
56 голосов
/ 21 апреля 2011

В своем приложении для iPhone я использую следующий код, чтобы определить размер файла.Несмотря на то, что файл существует, я вижу ноль для размера.Может кто-нибудь мне помочь?Заранее спасибо.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *URL = [documentsDirectory stringByAppendingPathComponent:@"XML/Extras/Approval.xml"];

NSLog(@"URL:%@",URL);
NSError *attributesError = nil;
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:URL error:&attributesError];

int fileSize = [fileAttributes fileSize];

Ответы [ 5 ]

124 голосов
/ 21 апреля 2011

Попробуйте это;

NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:URL error:&attributesError];

NSNumber *fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
long long fileSize = [fileSizeNumber longLongValue];

Обратите внимание, что fileSize не обязательно вписывается в целое число (особенно в знаковое), хотя вы, безусловно, могли бы перейти на длинную позицию для iOS, поскольку вы никогда не превысите ее в реальности. В примере используется long long, поскольку в моем коде я должен быть совместим с системами с гораздо большим объемом доступной памяти.

6 голосов
/ 22 апреля 2016

Один лайнер в Swift:

let fileSize = try! NSFileManager.defaultManager().attributesOfItemAtPath(fileURL.path!)[NSFileSize]!.longLongValue
2 голосов
/ 08 февраля 2018

Если у вас есть URL (NSURL, а не String), вы можете получить размер файла без FileManager:

 let attributes = try? myURL.resourceValues(forKeys: Set([.fileSizeKey]))
 let fileSize = attributes?.fileSize // Int?
1 голос
/ 29 января 2018

Swift 4.x

do {
    let fileSize = try (FileManager.default.attributesOfItem(atPath: filePath) as NSDictionary).fileSize()
            print(fileSize)
    } catch let error {
            print(error)
    }
0 голосов
/ 08 февраля 2018

Получить размер файла в МБ Попробуйте этот код для swift

func getSizeOfFile(withPath path:String) -> UInt64?
{
    var totalSpace : UInt64?

    var dict : [FileAttributeKey : Any]?

    do {
        dict = try FileManager.default.attributesOfItem(atPath: path)
    } catch let error as NSError {
         print(error.localizedDescription)
    }

    if dict != nil {
        let fileSystemSizeInBytes = dict![FileAttributeKey.systemSize] as! NSNumber

        totalSpace = fileSystemSizeInBytes.uint64Value
        return (totalSpace!/1024)/1024
    }
    return nil
}
...