iOS--在Sandbox(沙盒)中创建文件夹和文件

时间:2022-01-15 02:32:41

本文Demo源代码:https://github.com/gaussli/FileManagerDemo

之前了解过了沙盒内部的基本组成,今天学习下在沙盒中创建文件夹以及文件

之前在学习沙盒的时候,用过一种创建文件的方法(writeToFile:atomically:)。这次说说另外的一种方法

1. 创建文件夹(test文件夹)

    // 在Documents文件夹中创建文件夹
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];
    [fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];

2. 在test文件夹中创建三个文件,并且写入数据

    // 在test文件夹中创建三个测试文件(test1.txt/test2.txt/test3.txt),并写入数据
    NSString *test1FilePath = [testDirectory stringByAppendingPathComponent:@"test1.txt"];
    NSString *test2FilePath = [testDirectory stringByAppendingPathComponent:@"test2.txt"];
    NSString *test3FilePath = [testDirectory stringByAppendingPathComponent:@"test3.txt"];
    // 三个文件的内容
    NSString *test1Content = @"helloWorld";
    NSString *test2Content = @"helloTest2";
    NSString *test3Content = @"helloTest3";
    // 写入对应文件
    [fileManager createFileAtPath:test1FilePath contents:[test1Content dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
    [fileManager createFileAtPath:test2FilePath contents:[test2Content dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
    [fileManager createFileAtPath:test3FilePath contents:[test3Content dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
    

3. 获得文件夹中文件目录(递归获取)

    // 获得目录中的所有文件
    // 在test目录下再创建一个子目录subtest文件夹,里面再创建三个子文件(subtest1.txt/subtest2.txt/subtest3.txt)
    // 创建subtest目录
    NSString *subtestDirectoryPath = [testDirectory stringByAppendingPathComponent:@"subtest"];
    [fileManager createDirectoryAtPath:subtestDirectoryPath withIntermediateDirectories:YES attributes:nil error:nil];
    // 创建三个子文件
    [fileManager createFileAtPath:[subtestDirectoryPath stringByAppendingPathComponent:@"subtest1.txt"] contents:nil attributes:nil];
    [fileManager createFileAtPath:[subtestDirectoryPath stringByAppendingPathComponent:@"subtest2.txt"] contents:nil attributes:nil];
    [fileManager createFileAtPath:[subtestDirectoryPath stringByAppendingPathComponent:@"subtest3.txt"] contents:nil attributes:nil];
    
    NSArray *testDirectoryFiles = [fileManager subpathsOfDirectoryAtPath:testDirectory error:nil];
    NSLog(@"subpathsOfDirectoryAtPath的结果:%@", testDirectoryFiles);
    NSArray *testDirectoryFiles1 = [fileManager subpathsAtPath:testDirectory];
    NSLog(@"subpathsAtPath的结果:%@", testDirectoryFiles1);

打印结果:

iOS--在Sandbox(沙盒)中创建文件夹和文件


结果:

文件目录:

iOS--在Sandbox(沙盒)中创建文件夹和文件


最后,看到一大神分析的createFileAtPath和writeToFile两个函数的差异,这里截取一下。

原网址:http://www.tuicool.com/articles/7fE3Q3E

里面说到

创建文件方法createFileAtPath: contents: attributes: 与writeToFile:atomically:YES在效率上没有什么区别,因此估计两者使用了逻辑是一致的;writeToFile:atomically:NO 比writeToFile:atomically:YES 效率高也是合乎情理(因为atomically:YES是先写到一个临时备份文件然后再改名的,以此来保证操作的原子性,防止写数据过程中出现其他错误),但需要注意的是,在创建空文件时,writeToFile:atomically:NO 效率非常之高,可以考虑在频繁创建空文件的时候使用writeToFile:atomically:NO 。


至此,end~