A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. #import <Foundation/Foundation.h>   


  2. // 定义一个Scores结构体
  3. typedef struct {
  4.         double mathScore,engScore,cScore;
  5. } Scores;

  6. NSString * NSStringFromScores(Scores s);

  7. int main(int argc, const char * argv[])  
  8. {        
  9.     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  10.     NSFileManager *fm=[NSFileManager defaultManager];
  11.      
  12.            NSString * aryPath= @"C:/Users/Administrator/Desktop/ary.xml";
  13.            NSString * dictPath= @"C:/Users/Administrator/Desktop/dict.xml";
  14.           
  15.            // *1> OC数组的读写文件操作
  16.            NSArray *sary= [NSArray arrayWithObjects:@"Jack",@"Tommy",@"Bolt",nil];
  17.            BOOL aryFlag=[sary writeToFile:aryPath atomically:YES];
  18.            if(aryFlag)
  19.            {
  20.                    sary=[NSArray arrayWithContentsOfFile:aryPath];
  21.                    NSLog(@"\naryFromFile=\n%@",sary);
  22.            }
  23.           
  24.            // *2> OC字典的读写文件操作
  25.            NSMutableDictionary * dict = [NSMutableDictionary dictionary];
  26.            [dict setValue:sary forKey:@"ary"];
  27.            [dict setValue:aryPath forKey:@"aryPath"];
  28.            BOOL dictFlag=[dict writeToFile:dictPath atomically:YES];
  29.            if(dictFlag)
  30.            {
  31.                    dict=[NSMutableDictionary dictionaryWithContentsOfFile:dictPath];
  32.                    NSLog(@"\ndictFromFile=\n%@",dict);
  33.            }
  34.           
  35.           
  36.            // *3> OCstr的序列化与反序列化
  37.            NSString * path= @"C:/Users/Administrator/Desktop/str.txt";
  38.            // 将OCstr按某种编码方式encode成bytes保存在NSData
  39.            NSData *data=[@"this is an NSData test!!\n" dataUsingEncoding:NSUTF8StringEncoding];
  40.            // 将bytes写入文件
  41.            BOOL strPathFlag=[fm createFileAtPath:path contents:data attributes:nil];
  42.            if(strPathFlag)
  43.            {
  44.                    // 从文件读取bytes保存为NSData类型
  45.                 NSData *strData=[fm contentsAtPath:path];
  46.                 // 将bytes按某种解码方式decode成OCstr
  47.                 NSString *strFromData=[[[NSString alloc] initWithData:strData
  48.                 encoding:NSUTF8StringEncoding] autorelease];
  49.                 NSLog(@"\nstrFromData=%@",strFromData);          
  50.            }
  51.           
  52.    
  53.           
  54.            // *4> struct与NSValue的互相转换
  55.            Scores scores1={66.0,77.0,88.0},scores2={0},* scores3={0};
  56.            // 将struct包装成NSValue,@encode(Type)将struct类型转换成(char *)类型
  57.            NSValue *scoresVal=[NSValue valueWithBytes:&scores1 objCType:@encode(Scores)];
  58.            // 从NSValue中取出struct
  59.            [scoresVal getValue:&scores2];
  60.            NSLog(@"\nscoresValFromStruct=%@\nscores2FromNSValue=%@",scoresVal,NSStringFromScores(scores2));
  61.    
  62.    
  63.    // *5> 将数据按照其在内存中的bytes写入文件,并将文件中的bytes读入内存
  64.            NSString * bytePath= @"C:/Users/Administrator/Desktop/byte.txt";
  65.            // 将struct按照其内存中的bytes保存到NSData对象
  66.            NSData *data2=[NSData dataWithBytes:&scores2 length:sizeof(Scores)];
  67.            // 将bytes写入文件
  68.     BOOL bytePathFlag=[fm createFileAtPath:bytePath contents:data2 attributes:nil];
  69.            if(bytePathFlag)
  70.            {       
  71.                    // 从文件读取bytes保存到NSData对象
  72.                    NSData *data3=[fm contentsAtPath:bytePath];
  73.                    // 取出NSData对象中的bytes,转换成struct
  74.                    scores3=(Scores *)[data2 bytes];
  75.                    NSLog(@"\nscores3FromNSData=%@",NSStringFromScores(*scores3));
  76.            }
  77.    
  78.    
  79.     [pool drain];
  80.     return 0;
  81. }


  82. // 将Scores结构体转字符串
  83. NSString * NSStringFromScores(Scores s)
  84. {
  85.         return [NSString stringWithFormat:
  86.         @"{ mathScore=%.2f, engScore=%.2f, cScore=%.2f }",
  87.         s.mathScore,s.engScore,s.cScore];
  88. }
复制代码


2 个回复

倒序浏览
不错  很好的  继续努力
回复 使用道具 举报
看的我迷糊.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马