本地配置文件比对更新覆盖

来源:互联网 发布:软件售后服务承诺英文 编辑:程序博客网 时间:2024/06/05 06:31

检测本地文件是否更新过,我用过几种方法,写出来跟大家共享:

第一种:直接比对文件是否变化了,这个肯定不会错,但是就是比对的有点多:

    NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:0];
    NSMutableArray *writeTempArray = [NSMutableArray array];
    BOOL bNeedUpdate = false;
    NSString *defaultFilePath = S_GetPathInBundleDirectory(fileName);
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSString *writableFilePath = S_GetPathInDocumentDirectory([[fileName stringByDeletingPathExtension] stringByAppendingPathExtension:@"plist"]);
    BOOL bFileExist = [fileManager fileExistsAtPath:writableFilePath];
    if (bFileExist == false) {
        bNeedUpdate = true;
    }else {
        //读出来bundle中的文件
        NSString* xmlStr = [[NSString alloc] initWithContentsOfFile:defaultFilePath encoding:NSUTF8StringEncoding error:&error];
        NSDictionary *xmlFileContentDic = nil;
        if(xmlStr) {
            xmlFileContentDic = [PbXMLReader dictionaryForXMLString:xmlStr error:&error];
            if (error) {
                return;
            }
            tempArray = (NSMutableArray *)[[xmlFileContentDic objectForKey:@"pbitems"] objectForKey:@"item"];
        }
        //读出document中的文件
        NSDictionary *writeDic = [[NSDictionary alloc] initWithContentsOfFile:writableFilePath];
        writeTempArray = [writeDic objectForKey:[fileName stringByDeletingPathExtension]];
        //对两个数组直接进行比对,不一样,就重新写入,否则就跳过
        if ([tempArray isEqualToArray:writeTempArray]) {
            bNeedUpdate = NO;
        }else {
            bNeedUpdate = YES;
        }
    }
    if (bNeedUpdate == YES)
    {
       //那就写文件吧
    }

第二种方法,在配置文件中增加一个version字符串,每次更新都改这个version字符串,好处就是比对少,但是千万别忘记修改完配置文件后不知道修改这个version

    if(xmlStr) {
        xmlFileContentDic = [XMLReader dictionaryForXMLString:xmlStr error:&error];
        if (error) {
            return;
        }
        tempArray = (NSMutableArray *)[[xmlFileContentDic objectForKey:@"pbitems"] objectForKey:@"item"];
        newVersion = [[xmlFileContentDic objectForKey:@"pbitems"] objectForKey:@"version"];
        NSString * oldVersion = readHQTitleSettingsVersion([[fileName stringByDeletingPathExtension] stringByAppendingPathExtension:@"plist"]);
        if (![newVersion isEqualToString:oldVersion]|| !oldVersion) {
            bNeedUpdate = true;
        }
    }
    if (bNeedUpdate == true)
    {
        writeHQTitleSettings(fileName, tempArray, newVersion);
    }
}
NSString * GlobalData::readHQTitleSettingsVersion(NSString * plistFileName)
{
    NSString * version = nil;
    NSString *plistFilePath = YS_GetPathInDocumentDirectory(plistFileName);
    NSDictionary* dataDic = [[NSDictionary alloc] initWithContentsOfFile:plistFilePath];
    if (dataDic) {
        version = [dataDic objectForKey:@"version"];
    }
    return version;
}


0 0