@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. vNext之旅(1):从概念和基础开始

    ASP.NET vNext or .NET vNext? vNext在曝光以来绝大多数以ASP.NET vNext这样的的字眼出现,为什么这边会提及.NET vNext?原因是我认为ASP.NET只是 ...

  2. Python使用基础

    1) 基本概念1.1 常量 Python没有提供常量保留字,需要自行扩展一个常量类来实现常量功能 class _const: class ConstError(TypeError):pass def ...

  3. [BZOJ3696][FJSC2014]化合物(异或规则下的母函数)

    题目:http://hzwer.com/3708.html 分析: 类似树分治思想,设f[x][i]表示以x为根的子树的所有点中,与x的距离为i的点有多少个,这个可以预处理出来 然后我们考虑每颗子树对 ...

  4. asp.net mvc输出自定义404等错误页面,非302跳转。

    朋友问到一个问题,如何输出自定义错误页面,不使用302跳转.当前页面地址不能改变. 还要执行一些代码等,生成一些错误信息,方便用户提交反馈. 500错误,mvc框架已经有现成解决方法: filters ...

  5. android中通话录音

    file = new File(Environment.getExternalStorageDirectory(), this.incomeNumber + System.currentTimeMil ...

  6. Java设计模式(七) 模板模式

    [模板模式]在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 1,定义模板类 package com.pattern ...

  7. 安全框架 SpringSecurity 和 Shiro 对比

    突然再次很想理一下权限的事,但是实在不知道实际情况选哪个框架好,现在整理下网上的资料,做一下对比. 1.Spring-security 对spring 结合较好,如果项目用的springmvc ,使用 ...

  8. ELK系统中kibana展示数据的时区问题

    在采用ELK记录系统日志时,日志存入elasticsearch时,一般是以本地时区存入(如北京东8区) 在elasticsearch中直接查询时也没有任何问题,但是kibana在做日志展示时,对日志时 ...

  9. java-汉字转换拼音-pinyin4j.jar

    使用pinyin4j将汉字转成拼音,附件为pinyin4j的jar包 import net.sourceforge.pinyin4j.PinyinHelper; import net.sourcefo ...

  10. 控件(选择类): Selector, ComboBox

    1.Selector(基类) 的示例Controls/SelectionControl/SelectorDemo.xaml <Page x:Class="Windows10.Contr ...