NSFileManager 文件管理

前言

  • NSFileManager 文件管理

    • Objective-C

      1
      2
      @interface NSFileManager : NSObject
      @interface NSFileHandle : NSObject <NSSecureCoding>
    • Swift

      1
      2
      public class NSFileManager : NSObject
      public class NSFileHandle : NSObject, NSSecureCoding
    • NSFileManager 是 Foundation 框架中用来管理和操作文件、目录等文件系统相关联内容的类。

1、路径操作

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    // 文件管理器对象,单例类对象
    NSFileManager *nfManager = [NSFileManager defaultManager];

    NSURL *folderUrl = [NSURL URLWithString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/testFolder"]];
    NSURL *filerUrl = [NSURL URLWithString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/testFile.txt"]];

    NSURL *srcUrl = [NSURL URLWithString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/testFile.txt"]];
    NSURL *dstUrl = [NSURL URLWithString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/testFolder/testFile.txt"]];

    // 用于保存错误信息
    NSError *errorInfo = nil;

    // 创建文件夹
    /*
    -(BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates
    attributes:(NSDictionary *)attributes
    error:(NSError **)error;

    path:文件夹路径
    createIntermediates:是否连同上一级路径一起创建,NO 并且上一级文件路径不存在时会创建失败。
    attributes:文件夹属性,nil 系统默认属性
    error:保存错误原因
    BOOL:文件夹创建成功时返回值为 YES
    */

    BOOL bl1 = [nfManager createDirectoryAtPath:[folderUrl path] withIntermediateDirectories:YES
    attributes:nil
    error:&errorInfo];

    // 创建文件
    /*
    -(BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;

    path:文件路径
    data:文件内容,nil 空
    attr:文件属性,nil 系统默认属性
    BOOL:文件创建成功时返回值为 YES
    */

    BOOL bl2 = [nfManager createFileAtPath:[filerUrl path]
    contents:[@"北京欢迎您" dataUsingEncoding:NSUTF8StringEncoding]
    attributes:nil];

    // 拷贝文件
    /*
    如果 dstUrl 路径文件已存在,该方法会终止拷贝,并返回 false。
    如果 srcUrl 的最后一部分是符号链接,那么只有链接会被拷贝到新路径。
    */

    BOOL bl3 = [nfManager copyItemAtPath:[srcUrl path] toPath:[dstUrl path] error:nil];

    // 删除文件
    /*
    删除成功或者 url 为 nil 时返回 true,如果发生错误返回 false。如果使用 delegate
    终止了删除文件,则返回 true,如果使用 delegate 终止了删除目录,则返回 false
    */

    BOOL bl4 = [nfManager removeItemAtPath:[dstUrl path] error:nil];

    // 移动文件
    /*
    如果 dstUrl 路径文件已存在,该方法会终止移动,并返回 false。如果 srcUrl 的最后
    一部分是符号链接,那么只有链接会被移动到新路径。链接所指向的内容仍然保持在现有的位置。
    */

    BOOL bl5 = [nfManager moveItemAtPath:[srcUrl path] toPath:[dstUrl path] error:nil];

    // 查找满足指定条件的路径

    // 返回其 URL。该方法不但可以获得标准系统目录,还可以用来创建临时路径
    NSURL *url1 = [nfManager URLForDirectory:NSDocumentDirectory
    inDomain:NSUserDomainMask
    appropriateForURL:nil
    create:YES
    error:nil];

    // 返回所有满足条件的路径列表
    NSArray *urlObjs = [nfManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
    NSURL *url2 = urlObjs[0];

    // 查询指定路径下的所有子路径

    NSArray *urls1 = [nfManager subpathsAtPath:[url1 path]];
    NSArray *urls2 = [nfManager subpathsOfDirectoryAtPath:[url1 path] error:nil];

    // 浅遍历

    // 返回指定目录下的文件、子目录及符号链接的列表
    NSArray *contentsDir1 = [nfManager contentsOfDirectoryAtPath:[url1 path] error:nil];

    // 返回的是文件全路径
    NSArray *contentsDir2 = [nfManager contentsOfDirectoryAtURL:url1
    includingPropertiesForKeys:nil
    options:NSDirectoryEnumerationSkipsHiddenFiles
    error:nil];

    // 深遍历

    // 返回指定目录下的所有文件及其子目录下的所有元素路径
    NSDirectoryEnumerator *enumeratorDir1 = [nfManager enumeratorAtPath:[url1 path]];

    // 返回的是文件全路径
    NSDirectoryEnumerator *enumeratorDir2 = [nfManager enumeratorAtURL:url1
    includingPropertiesForKeys:nil
    options:NSDirectoryEnumerationSkipsHiddenFiles
    errorHandler:nil];

    // 枚举遍历深层遍历
    NSDirectoryEnumerator *dEnu = [nfManager enumeratorAtPath:[url1 path]];

    id obj = nil;
    while (obj = [dEnu nextObject]) {
    NSLog(@"%@", obj);
    }

    // 显示路径的本地化名称
    /*
    如果指定的文件或目录不存在,会返回 path 本身
    */
    NSString *displayName = [nfManager displayNameAtPath:[url1 path]];

    // 获取指定路径的各种属性

    NSDictionary *attributes = [nfManager attributesOfItemAtPath:[url1 path] error:nil];

    // 获取指定路径文件的内容数据
    /*
    如果指定路径为目录或发生错误,返回 nil
    */
    NSData *data = [nfManager contentsAtPath:[[url1 path] stringByAppendingString:@"/test.txt"]];

    // 获取当前路径

    NSString *currentPath = [nfManager currentDirectoryPath];

    // 更改当前路径
    /*
    /Users/JHQ0228/Desktop/Debug
    */
    BOOL bl6 = [nfManager changeCurrentDirectoryPath:[NSHomeDirectory() stringByAppendingString:@"/Desktop/Debug"]];

    // 获取临时工作路径
    /*
    获取系统中可以用来创建临时文件的目录路径名,一定要在完成任务之后将在其中创建的文件删除
    */
    NSString *tempPath = NSTemporaryDirectory();

    // 获取用户主路径(沙盒路径)

    NSString *homePath = NSHomeDirectory();

    // 获取指定用户的主路径
    /*
    NSUserName(); 获取当前用户的登录名。NSFullUserName(); 获取当前用户完整用户名
    */
    NSString *userHomePath = NSHomeDirectoryForUser(NSUserName());

    // 获取用户 Documents 路径

    NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    // 获取 app 包路径

    NSString *bundlePath = [[NSBundle mainBundle] bundlePath];

    // 创建一个新路径

    BOOL bl8 = [nfManager createDirectoryAtPath:[NSHomeDirectory() stringByAppendingString:@"/Desktop/Debug1"]
    withIntermediateDirectories:YES
    attributes:nil
    error:nil];

    // 判断文件是否为路径(flag 中存储结果 YES/NO)

    // 存储判断结果
    BOOL result;

    BOOL bl9 = [nfManager fileExistsAtPath:[NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"]
    isDirectory:&result];

    // 判断是否是根路径(绝对路径)
    /*
    路径以 “/” 开始的为根路径
    */

    BOOL bl10 = [@"../Desktop/test.txt" isAbsolutePath];

    // 获取最后一个路径

    NSString *lastPath = [[NSHomeDirectory() stringByAppendingString:@"/Desktop"] lastPathComponent];

    // 删除最后一个路径

    NSString *deleteLastPath = [[NSHomeDirectory() stringByAppendingString:@"/Desktop"] stringByDeletingLastPathComponent];

    // 拼接一个路径

    NSString *appendingPath = [[NSHomeDirectory() stringByAppendingString:@"/Desktop"] stringByAppendingPathComponent:@"testFolder"];

    // 文件路径分割

    NSArray *pathArray = [[NSHomeDirectory() stringByAppendingString:@"/Desktop"] pathComponents];

    // 文件路径组合

    NSString *pathString = [NSString pathWithComponents:pathArray];

    // 将路径中的代字符 ~ 扩展成用户主目录或指定用户的主目录

    // 特殊的代字符 ~ 是用户主目录(如:/Users/JHQ0228)的缩写,~linda 表示用户 linda 主目录的缩写
    NSString *path1 = @"~/Desktop/test.txt";

    // /Users/JHQ0228/Desktop/test.txt
    NSString *mainPath = [path1 stringByExpandingTildeInPath];

    // 解析路径中的符号链接

    // /.. 上一级目录
    NSString *path2 = @"~/../Debug";

    // 通过解析 ~(用户主目录)、..(父目录) 、.(当前目录)和符号链接来标准化路径
    NSString *appPath1 = [path2 stringByResolvingSymlinksInPath];

    // NSHomeDirectory()/.. NSHomeDirectory() 的上一级目录
    NSString *path3 = [NSString stringWithFormat:@"%@/../Debug", NSHomeDirectory()];
    NSString *appPath2 = [path3 stringByStandardizingPath];

    // 获取文件拓展名

    NSString *getExtension = [@"/Desktop/test.txt" pathExtension];

    // 删除文件拓展名

    NSString *deleteExtension = [@"/Desktop/test.txt" stringByDeletingPathExtension];

    // 拼接文件拓展名

    NSString *appendingExtension = [@"/Desktop/test.txt" stringByAppendingPathExtension:@"doc"];

    // 获取文件大小

    NSDictionary *dict = [[NSFileManager defaultManager] attributesOfItemAtPath:filerUrl.path error:NULL];
    long long fileSize = [dict[NSFileSize] longLongValue];
    long long fileSize = [dict fileSize];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    let nfManager = NSFileManager.defaultManager()

    let folderUrl: NSURL = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop/testFolder"))!
    let filerUrl: NSURL = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop/testFile.txt"))!

    let srcUrl: NSURL = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop/testFile.txt"))!
    let dstUrl: NSURL = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop/testFolder/testFile.txt"))!

    // 创建文件夹
    /*
    public func createDirectoryAtPath(path: String,
    withIntermediateDirectories createIntermediates: Bool,
    attributes: [String : AnyObject]?) throws

    path:文件夹路径
    createIntermediates:是否连同上一级路径一起创建,NO 并且上一级文件路径不存在时会创建失败。
    attributes:文件夹属性,nil 系统默认属性
    */

    try! nfManager.createDirectoryAtPath( folderUrl.path!,
    withIntermediateDirectories: true,
    attributes: nil)

    // 创建文件
    /*
    func createFileAtPath(path: String,
    contents data: NSData?,
    attributes attr: [NSObject : AnyObject]?) -> Bool

    path:文件路径
    data:文件内容,nil 空
    attr:文件属性,nil 系统默认属性
    Bool:文件创建成功时返回值为 true
    */

    let bl1: Bool = nfManager.createFileAtPath(filerUrl.path!, contents: nil, attributes: nil)

    // 拷贝文件
    /*
    如果 dstUrl 路径文件已存在,该方法会终止拷贝,并返回 false。
    如果 srcUrl 的最后一部分是符号链接,那么只有链接会被拷贝到新路径。
    */

    try! nfManager.copyItemAtPath(srcUrl.path!, toPath: dstUrl.path!)

    // 删除文件
    /*
    删除成功或者 url 为 nil 时返回 true,如果发生错误返回 false。如果使用 delegate 终止了删除文件的操作,
    则返回 true,如果使用 delegate 终止了删除目录的操作,则返回 false。
    */

    try! nfManager.removeItemAtPath(dstUrl.path!)

    // 移动文件
    /*
    如果 dstUrl 路径文件已存在,该方法会终止移动,并返回 false。如果 srcUrl 的最后一部分是符号链接,
    那么只有链接会被移动到新路径。链接所指向的内容仍然保持在现有的位置。
    */

    try! nfManager.moveItemAtPath(srcUrl.path!, toPath: dstUrl.path!)

    // 查找满足指定条件的路径

    // 返回其 URL。该方法不但可以获得标准系统目录,还可以用来创建临时路径。
    let url1: NSURL = try! nfManager.URLForDirectory( .DocumentDirectory,
    inDomain: .UserDomainMask,
    appropriateForURL: nil,
    create: true)

    // 返回所有满足条件的路径列表
    let urlObjs: [NSURL] = nfManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
    let url2: NSURL = urlObjs[0]

    // 查询指定路径下的所有子路径

    let urls1: [String]? = nfManager.subpathsAtPath(url1.path!)
    let urls2: [String] = try! nfManager.subpathsOfDirectoryAtPath(url1.path!)

    // 浅遍历

    // 返回指定目录下的文件、子目录及符号链接的列表
    let contentsDir1: [String] = try! nfManager.contentsOfDirectoryAtPath(url1.path!)

    // 返回文件全路径
    /*
    public func contentsOfDirectoryAtURL(url: NSURL,
    includingPropertiesForKeys keys: [String]?,
    options mask: NSDirectoryEnumerationOptions) throws -> [NSURL]

    返回指定目录下的文件、子目录及符号链接的列表,返回的是文件全路径。

    url:要进行搜索的目录路径,该路径不能为指向目标目录的符号链接,如果是可以使用 URLByResolvingSymlinksInPath 进行转换。
    keys:用来传入进行搜索的一些特定条件,包括创建时间,修改时间等。
    mask:SkipsHiddenFiles:表示不遍历隐藏文件,
    SkipsSubdirectoryDescendants:表示不递归到子目录内部,
    SkipsPackageDescendants:表示不递归到包内部。
    */

    let contentsDir2: [NSURL] = try! nfManager.contentsOfDirectoryAtURL( url1,
    includingPropertiesForKeys: nil,
    options: .SkipsHiddenFiles)

    // 深遍历

    // 返回指定目录下的所有文件及其子目录下的所有元素路径
    let enumeratorDir1: NSDirectoryEnumerator = nfManager.enumeratorAtPath(url1.path!)!

    // 返回文件全路径
    /*
    func enumeratorAtURL(url: NSURL,
    includingPropertiesForKeys keys: [AnyObject]?,
    options mask: NSDirectoryEnumerationOptions,
    errorHandler handler: ((NSURL!, NSError!) -> Bool)?) -> NSDirectoryEnumerator?

    返回指定目录下的所有文件及其子目录下的所有元素路径,返回的是文件全路径。

    url:要进行搜索的目录路径,该路径不能为指向目标目录的符号链接,如果是可以使用 URLByResolvingSymlinksInPath 进行转换。
    keys:用来传入进行搜索的一些特定条件,包括创建时间,修改时间等。
    mask:SkipsHiddenFiles:表示不遍历隐藏文件,
    SkipsSubdirectoryDescendants:表示不递归到子目录内部,
    SkipsPackageDescendants:表示不递归到包内部。
    */

    let enumeratorDir2: NSDirectoryEnumerator = nfManager.enumeratorAtURL( url1,
    includingPropertiesForKeys: nil,
    options: .SkipsHiddenFiles,
    errorHandler: nil)!

    // 枚举遍历深层遍历
    let dEnu: NSDirectoryEnumerator? = nfManager.enumeratorAtPath(url1.path!)

    while let obj: AnyObject? = dEnu?.nextObject() {
    print(obj)
    }

    // 显示路径的本地化名称
    /*
    如果指定的文件或目录不存在,会返回 path 本身。
    */
    let displayName: String = nfManager.displayNameAtPath(url1.path!)

    // 获取指定路径的各种属性

    let attributes: [String:AnyObject] = try! nfManager.attributesOfItemAtPath(url1.path!)

    // 获取指定路径文件的内容数据
    /*
    如果指定路径为目录或发生错误,返回 nil。
    */
    let data: NSData? = nfManager.contentsAtPath(url1.path!.stringByAppendingString("/test.txt"))

    // 获取当前路径

    let currentPath: String = nfManager.currentDirectoryPath

    // 更改当前路径
    /*
    /Users/JHQ0228/Desktop/Debug
    */
    let bl6: Bool = nfManager.changeCurrentDirectoryPath(NSHomeDirectory().stringByAppendingString("/Desktop/Debug"))

    // 获取临时工作路径
    /*
    获取系统中可以用来创建临时文件的目录路径名,一定要在完成任务之后将在其中创建的文件删除。
    */
    let tempPath: NSString = NSTemporaryDirectory()

    // 获取用户主路径(沙盒路径)

    let homePath: NSString = NSHomeDirectory()

    // 获取指定用户的主路径
    /*
    NSUserName(); 获取当前用户的登录名。NSFullUserName(); 获取当前用户完整用户名
    */
    let userHomePath: String? = NSHomeDirectoryForUser(NSUserName())

    // 获取用户 Documents 路径

    let documentPath: NSString = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]

    // 获取 app 包路径

    let bundlePath = NSBundle.mainBundle().bundlePath

    // 创建一个新路径

    try! nfManager.createDirectoryAtPath(NSHomeDirectory().stringByAppendingString("/Desktop/Debug1"),
    withIntermediateDirectories: true, attributes: nil)

    // 获取最后一个路径

    let lastPath: String? = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop"))?.lastPathComponent

    // 删除最后一个路径

    let deleteLastPath: String? = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop"))?
    .URLByDeletingLastPathComponent?
    .path

    // 拼接一个路径

    let appendingPath: String? = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop"))?
    .URLByAppendingPathComponent("testFolder")
    .path

    // 文件路径分割

    let pathArray: [String]? = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop"))?.pathComponents

    // 文件路径组合

    let pathString: NSString = NSString.pathWithComponents(pathArray!)

    // 将路径中的代字符 ~ 扩展成用户主目录或指定用户的主目录

    // 特殊的代字符 ~ 是用户主目录(如:/Users/JHQ0228)的缩写,~linda 表示用户 linda 主目录的缩写。
    let path1: NSString = "~/Desktop/test.txt";

    // /Users/JHQ0228/Desktop/test.txt
    let mainPath: String = path1.stringByExpandingTildeInPath

    // 解析路径中的符号链接
    /*
    /.. 上一级目录
    */
    let path2: NSString = "~/../Debug"
    let appPath1: String = path2.stringByResolvingSymlinksInPath

    // 通过解析 ~(用户主目录)、..(父目录) 、.(当前目录)和符号链接来标准化路径
    /*
    NSHomeDirectory()/.. NSHomeDirectory() 的上一级目录
    */
    let path3: NSString = NSString(format:"%@/../Debug", NSHomeDirectory())
    let appPath2: String = path3.stringByStandardizingPath

    // 获取文件拓展名

    let getExtension: String? = NSURL(string: "/Desktop/test.txt")?.pathExtension

    // 删除文件拓展名

    let deleteExtension: String? = NSURL(string: "/Desktop/test.txt")?.URLByDeletingPathExtension?.pathExtension

    // 拼接文件拓展名

    let appendingExtension: String? = NSURL(string: "/Desktop/test.txt")?.URLByAppendingPathExtension("doc").path

2、路径判断

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    NSFileManager *nfManager = [NSFileManager defaultManager];
    NSURL *url1 = [nfManager URLForDirectory:NSDocumentDirectory
    inDomain:NSUserDomainMask
    appropriateForURL:nil
    create:YES
    error:nil];

    // 判断路径是否存在
    /*
    如果当前路径以~开头,需使用 NSString 的 stringByExpandingTildeInPath 方法进行处理,否则会返回 false
    */

    BOOL bl1 = [nfManager fileExistsAtPath:[url1 path]];

    // 判断指定路径是否有可读权限

    BOOL bl2 = [nfManager isReadableFileAtPath:[url1 path]];

    // 判断指定路径是否有可写权限

    BOOL bl3 = [nfManager isWritableFileAtPath:[url1 path]];

    // 判断指定路径是否有可执行权限

    BOOL bl4 = [nfManager isExecutableFileAtPath:[url1 path]];

    // 判断指定路径是否有可删除权限

    BOOL bl5 = [nfManager isDeletableFileAtPath:[url1 path]];

    // 判断两个指定路径的内容是否相同

    BOOL bl6 = [nfManager contentsEqualAtPath:[url1 path] andPath:[[url1 path] stringByAppendingString:@"/test.txt"]];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    let nfManager = NSFileManager.defaultManager()
    let url1: NSURL = try! nfManager.URLForDirectory( .DocumentDirectory,
    inDomain: .UserDomainMask,
    appropriateForURL: nil,
    create: true)

    // 判断路径是否存在
    /*
    如果当前路径以~开头,需使用 NSString 的 stringByExpandingTildeInPath 方法进行处理,否则会返回 false
    */

    let bl1: Bool = nfManager.fileExistsAtPath(url1.path!)

    // 判断指定路径是否有可读权限

    let bl2: Bool = nfManager.isReadableFileAtPath(url1.path!)

    // 判断指定路径是否有可写权限

    let bl3: Bool = nfManager.isWritableFileAtPath(url1.path!)

    // 判断指定路径是否有可执行权限

    let bl4: Bool = nfManager.isExecutableFileAtPath(url1.path!)

    // 判断指定路径是否有可删除权限

    let bl5: Bool = nfManager.isDeletableFileAtPath(url1.path!)

    // 判断两个指定路径的内容是否相同

    let bl6: Bool = nfManager.contentsEqualAtPath( url1.path!,
    andPath: url1.path!.stringByAppendingString("/test.txt"))

3、文件操作

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    NSURL *fileUrl = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0];

    // 文件打开

    NSFileHandle *nfHandle = [NSFileHandle fileHandleForUpdatingAtPath:[[fileUrl path] stringByAppendingString:@"/test.txt"]];

    NSFileHandle *nfHandle1 = [NSFileHandle fileHandleForReadingAtPath:[[fileUrl path] stringByAppendingString:@"/test.txt"]];

    NSFileHandle *nfHandle2 = [NSFileHandle fileHandleForWritingAtPath:[[fileUrl path] stringByAppendingString:@"/test.txt"]];

    // 文件句柄偏移量

    // 获取文件句柄指针的偏移量
    unsigned long long offSetNum1 = [nfHandle offsetInFile];

    // 将偏移量移到文件末尾,返回移动后的指针偏移量
    unsigned long long offSetNum2 = [nfHandle seekToEndOfFile];

    // 将偏移量指向特定的位置
    [nfHandle seekToFileOffset:0];

    // 文件读取

    // 获取当前文件句柄的可用数据,获取后指针移到文件末尾
    NSData *availableData = [nfHandle availableData];

    // 获取从当前指针位置到文件结束的所有数据,获取后指针移到文件末尾
    NSData *data1 = [nfHandle readDataToEndOfFile];

    // 获取从当前指针位置开始读取的 length 长度的数据内容,获取后指针移到文件读取到的位置
    NSData *data2 = [nfHandle readDataOfLength:10];

    // 文件写入

    // 从当前指针位置写入数据到文件
    [nfHandle writeData:[@"你好" dataUsingEncoding:NSUTF8StringEncoding]];

    // 文件关闭

    // 关闭文件
    [nfHandle closeFile];

    // 文件比较

    NSFileManager *nfManager = [NSFileManager defaultManager];

    // 文件路径
    NSString *filePath1 = [NSHomeDirectory() stringByAppendingString:@"/Desktop/file1.txt"];
    NSString *filePath2 = [NSHomeDirectory() stringByAppendingString:@"/Desktop/file2.txt"];

    [nfManager createFileAtPath:filePath1
    contents:[@"北京欢迎您" dataUsingEncoding:NSUTF8StringEncoding]
    attributes:nil];

    [nfManager createFileAtPath:filePath2
    contents:[@"北京欢迎" dataUsingEncoding:NSUTF8StringEncoding]
    attributes:nil];

    // 比较两个文件的内容是否相等
    BOOL bl = [nfManager contentsEqualAtPath:filePath1 andPath:filePath2];
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    let fileUrl: NSURL = NSFileManager.defaultManager().URLsForDirectory( .DocumentDirectory, 
    inDomains: .UserDomainMask)[0]
    as! NSURL

    // 文件打开

    // 读写
    var nfHandle = NSFileHandle(forUpdatingAtPath: fileUrl.path!.stringByAppendingString("/test.txt"))!

    // 只读
    var nfHandle1 = NSFileHandle(forReadingAtPath: fileUrl.path!.stringByAppendingString("/test.txt"))!

    // 只写
    var nfHandle2 = NSFileHandle(forWritingAtPath: fileUrl.path!.stringByAppendingString("/test.txt"))!

    // 文件句柄偏移量

    // 获取文件句柄指针的偏移量
    let offSetNum1: UInt64 = nfHandle.offsetInFile

    // 将偏移量移到文件末尾,返回移动后的指针偏移量
    let offSetNum2: UInt64 = nfHandle.seekToEndOfFile()

    // 将偏移量指向特定的位置
    nfHandle.seekToFileOffset(0)

    // 文件读取

    // 获取当前文件句柄的可用数据,获取后指针移到文件末尾
    let availableData: NSData = nfHandle.availableData

    // 获取从当前指针位置到文件结束的所有数据,获取后指针移到文件末尾
    let data1: NSData = nfHandle.readDataToEndOfFile()

    // 获取从当前指针位置开始读取的 length 长度的数据内容,获取后指针移到文件读取到的位置
    let data2: NSData = nfHandle.readDataOfLength(10)

    // 文件写入

    // 从当前指针位置写入数据到文件
    nfHandle.writeData("你好".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!)

    // 文件关闭

    // 关闭文件
    nfHandle.closeFile()

    // 文件比较

    let nfManager = NSFileManager.defaultManager()

    // 文件路径
    let filePath1: String = NSHomeDirectory().stringByAppendingString("/Desktop/file1.txt")
    let filePath2: String = NSHomeDirectory().stringByAppendingString("/Desktop/file2.txt")

    nfManager.createFileAtPath( filePath1,
    contents: "北京欢迎您".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true),
    attributes: nil)

    nfManager.createFileAtPath( filePath2,
    contents: "北京欢迎".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true),
    attributes: nil)

    // 比较两个文件的内容是否相等
    let bl: Bool = nfManager.contentsEqualAtPath(filePath1, andPath: filePath2)
文章目录
  1. 1. 前言
  2. 2. 1、路径操作
  3. 3. 2、路径判断
  4. 4. 3、文件操作
隐藏目录