@interface NSFileManager : NSObject

NSFileManager操作:

1.文件夹创建删除

2.文件创建删除

3.清除数据缓存

以上办法都在这里:https://developer.apple.com/library/mac/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW1

笔记:

NSFileManager的文件对象操作的优势:

 NSFileManager. An advantage of file reference URLs is that they are less fragile than path-based URLs while your app is running. If the user moves a file in the Finder, any path-based URLs that refer to the file immediately become invalid and must be updated to the new path. However, as long as the file moved to another location on the same disk, its unique ID does not change and any file reference URLs remain valid.

1>sandbox中的执意要两大部分:bundle container and  data container ,etc.,如图:

2>主要记录Data container

2.1>Documents/ 可以创建保存文件和文件夹,目的很明确,让用户创建和操作的文件(暴漏的)。文件的内容可以在iTunces备份。

2.2>Library/ 跟Documents文件差不多,但是它里面在创建之初就已经创建几个默认的文件夹了,eg:Caches/  Preferences/ etc.(Preference/ 中放着NSUserDefault关联的plist文件)

Caches/ 中存在SnapShot:app截图 。

2.3>Library/Application support/ 文件,一般是用户区创建也可以操作,但是是hidden(不暴漏的),用于存储配置文件,模板等app系统配置相关的文件。

3>Accessing Files and Directories(文件路径操作读写)

Before you can open a file, you first have to locate it in the file system. The system frameworks provide many routines for obtaining references to many well-known directories, such as the Library directory and its contents. You can also specify locations manually by building a URL or string-based path from known directory names.

When you know the location of a file, you can then start planning the best way to access it. Depending on the type of file, you may have several options. For known file types, you typically use built-in system routines to read or write the file contents and give you an object that you can use. For custom file types, you may need to read the raw file data yourself.

Choose the Right Way to Accessing Files

Although you can open any file and read its contents - lists the common file types supported by the system along with information about how you access them.

读到这里,大体上说拼接一个Location来获取文件,有两种方法:NSURL和NSString

但是,官方文档说了,如果你想获取一个本地的地址,最好使用NSURL来获取本地地址Access文件,文档中说啦:

The preferred way to specify the location of a file or directory is to use the NSURL class. Although the NSString class has many methods related to path creation, URLs offer a more robust(牛逼的) way to locate files and directories. For apps that also work with network resources, URLs also mean that you can use one type of object to manage items located on a local file system or on a network server

建议用NSURL拼接本地地址

当然,官方文档又说了,还有一个东西跟NSURL功能可以互换的,叫做CGURLRef

Note: In addition to NSURL, you can also use the CFURLRef opaque type to manipulate paths as URLs. The NSURL class is toll-free bridged with the CFURLRef type, which means you can use them interchangeably in your code. For more information about how to create and manipulate URLs using Core Foundation, see CFURL Reference.

CGURLRef官方也推荐

使用NSURL来创建文件夹:

    NSFileManager * shareFM = [NSFileManager defaultManager];
    NSArray * possibleURLs = [shareFM URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
    NSURL * appSupportDir = nil;
    NSURL * appDirectory = nil;

    )
    {
        appSupportDir = [possibleURLs objectAtIndex:];
    }
    if (appSupportDir)
    {
        NSString * appBundleID = [[NSBundle mainBundle] bundleIdentifier];
        appDirectory = [appSupportDir URLByAppendingPathComponent:appBundleID];
        [shareFM createDirectoryAtURL:appDirectory withIntermediateDirectories:YES attributes:nil error:nil];
    }

    NSLog(@"%@",appDirectory);

NSURL创建文件夹

4.Enumerating the Contents of a Directory // 遍历文件夹中文件

Enumerating a directory one file at a time is recommended when you want to search for a specific file and stop enumerating when you find it. File-by-file enumeration uses the NSDirectoryEnumerator class, which defines the methods for retrieving items. Because NSDirectoryEnumerator itself is an abstract class, however, you do not create instances of it directly. Instead, you use either the enumeratorAtURL:includingPropertiesForKeys:options:errorHandler: or the enumeratorAtPath: method of NSFileManager object to obtain a concrete instance of the class for use in your enumeration.

遍历文件

5.Use Secure Coding Practices(使用安全编码规范)

5.1>删除一个空文件的时候,要求之前判断文件是空的时候,在执行删除。

5.2>在进行文件操作的时候权限不是执行操作独立的,所以在你创建一个文件之前判断她是不存在的,或者你必须肯定读,写数据的文件是你创建的。

5.3>无论任何时候,操作文件使用名称好过文件路径,这样的方式可以保证你一直操作同一个文件。

5.4>把创建文件的方法独立成一个方法,这样你可以更好的知道你所创建的文件是不是已经一个已经存在的。

5.5>读一个文件的时候,首先判断是否有是自己权限和你要操作的权限,这样可以避免程序hanging,在失败的时候可以进行很好的失败处理。

@interface NSFileManager : NSObject的更多相关文章

  1. iOS - OC NSFileManager 文件管理

    前言 @interface NSFileManager : NSObject @interface NSFileHandle : NSObject <NSSecureCoding> NSF ...

  2. 用NSData和NSFileManager保存内存中的对象

    曾经接触过iOS开发,并且开发过两个应用,纵然青涩,也算是一断美好的回忆.转眼就已经一年多了!现在回过头来决定再次拿起iOS开发. 下面讲NSData: NSdata的概念 1.使用文件时需要频繁地将 ...

  3. 【OC加强】辛格尔顿和[NSFileManager defaultMagager]以及其他设计模式

    我们在工作中使用文件NSFileManager上课时间,创建发现1对象,此2同样的对象地址: NSFileManager *file1=[NSFileManager defaultManager]; ...

  4. 数据持久化-存取方式总结&应用沙盒&文件管理NSFileManager

    iOS应用数据存储的常用方式:  1.XML属性列表   (plist归档)  2.NSUserDefaults (偏好设置)  3.NSKeyedArchiver  归档(加密形式)  4.SQLi ...

  5. YYModel 源码解读(二)之NSObject+YYModel.h (2)

    _YYModelMeta   这个内部的类主要是对这个类的描述.包含了和此类转换相关的数据. /// A class info in object model. @interface _YYModel ...

  6. YYModel 源码解读(二)之NSObject+YYModel.h (1)

    本篇文章主要介绍 _YYModelPropertyMeta 前边的内容 首先先解释一下前边的辅助函数和枚举变量,在写一个功能的时候,这些辅助的东西可能不是一开始就能想出来的,应该是在后续的编码过程中 ...

  7. iOS Class 使用NSProxy和NSObject设计代理类的差异

    经常发现在一些需要使用消息转发而创建代理类时, 不同的程序员都有着不同的使用方法, 有些采用继承于NSObject, 而有一些采用继承自NSProxy. 二者都是Foundation框架中的基类, 并 ...

  8. 只用@property定义一个属性speed,子类不能直接用_speed,需要在interface的成员变量列表里写上_speed

    //写法一: @interface Person : NSObject { } @property (nonatomic, strong) NSString *name; @end @implemen ...

  9. IOS OC声明变量在@interface括号中与使用@property的区别

    方式一:直接在@interface中的大括号中声明. @interface MyTest : NSObject{ NSString *mystr; } 方式二:在@interface中声明,然后再在@ ...

随机推荐

  1. 同态加密-Homomorphic encryption

    同态加密(Homomorphic encryption)是一种加密形式,它允许人们对密文进行特定的代数运算得到仍然是加密的结果,将其解密所得到的结果与对明文进行同样的运算结果一样.换言之,这项技术令人 ...

  2. 东大OJ-双塔问题

    1212: VIJOS-P1037 时间限制: 0 Sec  内存限制: 128 MB 提交: 58  解决: 19 [提交][状态][讨论版] 题目描述         2001年9月11日,一场突 ...

  3. JSON与js对象序列化

    JavaScript对象表示法(JavaScript Object Notation,简称JSON)是一种轻量级的数据交换格式,它基于js字面量表示法,是js的一个子集.虽然是一个js的子集但是他与语 ...

  4. mysql5.5的安装与配置(亲测版)

    mysql5.5.x的编译安装 说明:5.5和5.1差不多,只是在编译时增加了一个cmake,其他基本一样,mysql5.5默认编码是utf-8,在使用mysql5.5配置lnmp或者lamp后安装d ...

  5. 概率DP light oj 1038

    t个数据 然后一个n 输出变成1的期望 看个数据 dp[n]代表n变成1的期望 cnt代表因子个数 pi代表因子 那么dp[n]=1/cnt*(dp[n/p1]+1)+1/cnt*(dp[n/p2]+ ...

  6. bzoj1503

    treap改了好长时间,erase写错了... #include<iostream> #include<cstdio> #include<cstdlib> usin ...

  7. hibernate在使用sql查询query自动转化成model类型数据,query.addEntity

    hibernate使用自动的hql查询或者其封装的查询方法都能字段转化成对象 而如果在hibernate中使用sql时大多返回为Object[]对象 那么如何将object[]转换成model呢,答案 ...

  8. 北京Java培训机构哪个好

    又是一年暑期生活的来临,对于即将走出校园的实习生而言,培训潮与就业潮不约而至,培训行业的就业课程开班也如火如荼地进行着. 一直以来,计算机专业的毕业生都会作为一股庞大的生力军涌入社会各个岗位.就目前的 ...

  9. Event&Condition pyton

    Event 一个线程需要根据另外一个线程的状态来确定自己的下一步操作,需要调用threading库中Event对象:Event包含一个可由线程设置的信号标志,在初始情况下,event对象的标志位为假( ...

  10. springmvc使用RSA算法加密表单

    今天被吐槽在客户端用js对密码进行md5加密其实也不见得安全.这种做法其实不见得有什么作用,学过计算机网络都知道,在网上抓一个包是很简单的事,就算别人抓包抓不到你原始密码,用这个md5后的密码一样可以 ...