iPhone文件操作(资料+总结)

来源:互联网 发布:食色无双淘宝 编辑:程序博客网 时间:2024/04/29 04:00

iPhone文件操作(资料+总结)

首先我先了解一下iPhone用程序中App录结构,如下:

         iPhone文件操作(资料+总结)

 

     对于一个运行在iPhoneapp,它只能访问自己根目下得一些文件(所sandbox).

一个app布到iPhone上后,它得目录结构如下:

 

1其中的app root可以用 NSHomeDirectory()访问到;

         例如NSString *documentsDirectory= NSHomeDirectory();

 

2Documents就是我可以用来写入并保存文件得地方,一般可通

    1.NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES);

    2.NSString *documentsDirectory = [paths objectAtIndex:0];

    也可用

    NSString *documentsDirectory= [NSHomeDirectory()stringByAppendingPathComponent:@"Documents"];

3tmp可以在里面写入一些程序运行需要用数据,里面写入的数据在程序退出后会没有。

    可以通过:

    NSString *NSTemporaryDirectory(void);方法得到

 

4文件操作可以通过NSFileManage 来操作,可以通过 [NSFileManger defaultManger] 得到它例。    相关得一些操作:

    创建一个目录:比如要在Documents下面创建一个test目录:

 

   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  

   NSString *documentsDirectory = [paths objectAtIndex:0];//获得路径,常用的

   NSLog(@"%@",documentsDirectory); 

   NSFileManager *fileManage = [NSFileManagerdefaultManager]; 

   NSString *myDirectory = [documentsDirectory stringByAppendingPathComponent:@"test"]; 

   BOOL ok = [fileManage   createDirectoryAtPath:myDirectory attributes:nil];

 

 (小插曲)
        - (BOOL)createDirectoryAtPath:(NSString *)path attributes:(NSDictionary *)attributes;  

   会出现'createDirectoryAtPath:attributes:' is deprecated警告

   这个意思是说在以后的版本中这个API有可能被抛弃,所以苹果不赞成你使用这个API,一般会有另一个API取代它!故在 Leopard之就

   不赞成使用了取而代之的是:

    - (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates

                                            attributes:(NSDictionary *)attributes error:(NSError **)error;

 

 取得一个目录下得所有文件名:

    NSFileManager *fileManage = [NSFileManagerdefaultManager];              //指向文件目录

    NSString *myDirectory= [NSHomeDirectory() stringByAppendingPathComponent:@"test"];

    NSLog(@"%@",myDirectory);

    NSArray *file = [fileManage subpathsOfDirectoryAtPath: myDirectory error:nil];       

    NSLog(@"%目录下得所有文件名%@",file); 

            //或者

    NSArray *files = [fileManage subpathsAtPath: myDirectory ];

    NSLog(@"%目录下得所有文件名%@",files); 

 

 创建文件(接上面,创建在自己的目录下的)

    //创建文件管理器

    NSFileManager *fileManager = [NSFileManagerdefaultManager];

           NSString *documentsDirectory= [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/test"];

    //更改到待操作的目录下

    [fileManager changeCurrentDirectoryPath:[documentsDirectory stringByExpandingTildeInPath]];

    //创建文件fileName文件名称,contents文件的内容,如果开始没有内容可以设置为nilattributes文件的属性,初始为nil

    [fileManagercreateFileAtPath:@"fileName"contents:nilattributes:nil];

 

 创建文件(创建在Documents目录下的)

   //创建文件管理器

   NSFileManager *fileManager = [NSFileManagerdefaultManager];

   //获取路径//参数NSDocumentDirectory要获取那种路径

   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectoryNSUserDomainMask, YES);

   NSString *documentsDirectory = [paths objectAtIndex:0];//去处需要的路径

   //更改到待操作的目录下

   [fileManagerchangeCurrentDirectoryPath:[documentsDirectory stringByExpandingTildeInPath]];

   //创建文件fileName文件名称,contents文件的内容,如果开始没有内容可以设置为nilattributes文件的属性,初始为nil

   [fileManagercreateFileAtPath:@"tongtong"contents:nilattributes:nil];

 

4写入文件

 写入基本数据

   NSFileManager *fileMgr = [NSFileManagerdefaultManager];  //指向文件目录

   NSString *documentsDirectory= [NSHomeDirector()stringByAppendingPathComponent:@"Documents/test"];//创建文件管理器

   NSLog(@"目录文件保存位置%@",documentsDirectory);

        //获得我们需要的文体的位置

   NSString *filePath= [documentsDirectory stringByAppendingPathComponent:@"file1.txt"]; 

   //需要写入的字符串

   NSString *str= @"iPhoneDeveloper Tips\nhttp://iPhoneDevelopTips,com"

   //写入文件

   [str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncodingerror:nil]; 

   //显示文件目录的内容

   NSLog(@"Documentsdirectory: %@"[fileMgrcontentsOfDirectoryAtPath:documentsDirectory error:nil]);

 

 写入数据:

   NSString *documentsDirectory= [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/test"];

   NSLog(@"%@",documentsDirectory); 

   NSString *path= [documentsDirectory  stringByAppendingPathComponent:@"file1.txt"]; 

   //待写入的数据

   NSString *temp = @"Hello friend";

   int data0 = 100000;

   float data1 = 23.45f;

   //创建数据缓冲

   NSMutableData *writer = [[NSMutableDataalloc] init];

   //将字符串添加到缓冲中

   [writer appendData:[tempdataUsingEncoding:NSUTF8StringEncoding]];

   //将其他数据添加到缓冲中

   [writer appendBytes:&data0 length:sizeof(data0)];

   [writer appendBytes:&data1 length:sizeof(data1)];

   //将缓冲的数据写入到文件中

   [writer writeToFile:path atomically:YES];

   [writer release];

 

 

5读取文件

 读取数据(接上面):

   NSString *documentsDirectory= [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/test"];

   NSLog(@"%@",documentsDirectory); 

   NSString *path= [documentsDirectory stringByAppendingPathComponent:@"file1.txt"]; 

   //待写入的数据

   NSString *temp = @"Hello friend";

   int gData0;

   float gData1;

   NSString *gData2;

   NSData *reader = [NSDatadataWithContentsOfFile:path];

   gData2 = [[NSStringalloc] initWithData:[reader subdataWithRange:NSMakeRange(0, [temp length])]

                                                                           encoding:NSUTF8StringEncoding];

   [reader getBytes:&gData0 range:NSMakeRange([templength], sizeof(gData0))];

   [reader getBytes:&gData1 range:NSMakeRange([templength] + sizeof(gData0), sizeof(gData1))];

   NSLog(@"gData0:%d  gData1:%f gData2:%@", gData0, gData1, gData2);

 

 

6删除文件

   //filePath中判断是否删除这个文件

   if ([fileMgr removeItemAtPath:filePath error:&error] != YES

         NSLog(@"Unable to delete file: %@", [error localizedDescription]); 

   //显示文件目录的内容

   NSLog(@"Documentsdirectory: %@"[fileMgrcontentsOfDirectoryAtPath:documentsDirectory error:&error]);

原创粉丝点击