zoukankan      html  css  js  c++  java
  • iOS 关于文件的操作

    最近做东西,遇到了使用文件方面的问题,花了点时间把文件研究了一下!

     关于文件路径的生成

    我用的方法是:

    -(NSString*)dataFilePath

    {

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

        NSString * documentsDirectory  = [paths objectAtIndex:0];

        NSLog(@"—0——%@",documentsDirectory);

        return [documentsDirectory stringByAppendingPathComponent:@"cataog.db”];

    }

    但是NSDocumentDirectory是指程序中对应的Documents 路径,

     NSDocumentationDiretory是对应于程序中的Library/Documentation 路径 ,这个路径是没有读写权限的,所以即使自己所查找的文件不存在,也看不到文件的自动生成!

    所以以上应改为:

    -(NSString*)dataFilePath

    {

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

        NSString * documentsDirectory  = [paths objectAtIndex:0];

        

        NSString *path =[documentsDirectory stringByAppendingPathComponent:@"cataog.db"];

        NSLog(@"*****%@",path);

       return path;

    }

    这样的话就可以了!

    下面讨论一下对文件的操作:

    对文件的操作,核心函数是:NSSearchPathForDirectoriesInDomains 

    iOS 看开发是在沙盒中开发的,对一些部分的文件的读写进行了限制,只能在几个目录下读写文件:

    (1)Documents :应用中用户数据可以存放在这里,iTunes的数据备份和恢复的时候会包括此目录

    (2)tmp:存放临时文件的,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除

    (3)Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会再应用退出删除对于文件的操作

      利用NSSearchPathForDirectoriesInDomains 建立文件,并可以向内写入数据

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

        NSString * documentsDirectory  = [paths objectAtIndex:0];

    NSString *content=@"write data into myFile”; 

    NSData *contentData=[content dataUsingEncoding:NSASCIIStringEncoding]; 

    if ([contentData writeToFile:fileName atomically:YES]) {
        NSLog(@">>write ok."); 
    }

    如果要想文件内写入文字的话,需要改变编码方式:

    NSString *contentChinese=@"写入汉字信息到文件”; 

    NSData *contentChineseData=[contentChinese dataUsingEncoding:NSUnicodeStringEncoding];

    if ([contentData writeToFile:fileName atomically:YES]) {
        NSLog(@">>写入成功."); 

    }

    如果要指定其他文件目录,比如Caches目录,需要更换目录常量为:NSCachesDirectory  

    为大家列出:

            常量                                                                      目录       
    NSDocumentDirectory                        <Application_Home>/Documents       
    NSCachesDirectory                             <Application_Home>/Library/Caches       NSApplicationSupportDirectory          <Application_Home>/Library/ApplicationSupport  

      另外我们在开发中也需要用到一些资源文件:

    NSString *Path = [[NSBundle mainBundle] 
                            pathForResource:@"f" 
                            ofType:@"txt"]; 
    NSString *Content=[NSString stringWithContentsOfFile:Path encoding:NSUTF8StringEncoding error:nil]; 
    NSLog(@" path: %@ file content:%@",Path,Content);

    代码改变世界
  • 相关阅读:
    webpack脚手架增加版本号
    background-image:url为空引发的两次请求问题
    vue中引入.svg图标,使用iconfont图标库
    mysql数据库
    vue 博客知识点汇总
    vue中显示markdown文件为html
    canvans知识点
    js如何实现一定时间后去执行一个函数
    CSS3选择器使用小结
    为什么margin-top不是作用于父元素
  • 原文地址:https://www.cnblogs.com/feiyafeiblog/p/4663841.html
Copyright © 2011-2022 走看看