查找文件大小

时间:2011-04-21 12:08:53

标签: objective-c cocoa-touch ios nsfilemanager filesize

在我的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 个答案:

答案 0 :(得分:123)

试试这个;

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

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

请注意,fileSize不一定适合整数(特别是签名的整数),尽管对于iOS来说肯定会有很长的时间,因为实际上你永远不会超过它。该示例使用long long,因为在我的代码中,我必须与具有更大存储空间的系统兼容。

答案 1 :(得分:6)

Swift中的一个班轮:

let fileSize = try! NSFileManager.defaultManager().attributesOfItemAtPath(fileURL.path!)[NSFileSize]!.longLongValue

答案 2 :(得分:2)

如果你有URLNSURL,而不是String),则可以获得没有FileManager的文件大小:

 let attributes = try? myURL.resourceValues(forKeys: Set([.fileSizeKey]))
 let fileSize = attributes?.fileSize // Int?

答案 3 :(得分:1)

Swift 4.x

do {
    let fileSize = try (FileManager.default.attributesOfItem(atPath: filePath) as NSDictionary).fileSize()
            print(fileSize)
    } catch let error {
            print(error)
    }

答案 4 :(得分:0)

MB 获取文件大小 尝试 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
}