将文件分成10MB块

时间:2013-06-24 08:02:44

标签: objective-c

我有一个脚本将文件分成10MB块。在我尝试在6GB文件上执行此操作之前,此脚本没有问题。即使它们是uint64_t,也会在范围上获得负值。关于错误在哪里的任何建议?

NSData *conData = [NSURLConnection sendSynchronousRequest:fileSizeRequest returningResponse:&response error:&error];

if (conData)
{
    NSDictionary *headers = [response allHeaderFields];
    NSString *fileSizeString = [headers objectForKey:@"Content-Length"];
    uint64_t fileSize = strtoull([fileSizeString UTF8String], NULL, 0);
    self.size += fileSize;

    uint64_t amountOfRanges = fileSize / 10485760;
    for (int i = 0; i <= amountOfRanges; i++)
    {
        uint64_t rangeMin = 0;
        uint64_t rangeMax = 0;

        if (i != amountOfRanges)
        {
            rangeMin = i * 10485760;
            rangeMax = (i + 1) * 10485760 - 1;
        }
        else
        {
            if (i == 0)
            {
                rangeMin = 0;
                rangeMax = fileSize - 1;
            }
            else
            {
                rangeMin = i * 10485760;
                rangeMax = i * 10485760 - 1 + (fileSize - rangeMin);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:3)

您遇到以下表达式的问题:

        rangeMin = i * 10485760;

请注意,iint10485760int字面值,因此生成的int表达式很容易溢出。理想情况下,您应该使i成为uint64_t和/或使用unsigned long long文字,例如

        rangeMin = i * 10485760ULL;