美文网首页
MACOS开发中的文件操作

MACOS开发中的文件操作

作者: 共田君 | 来源:发表于2017-11-29 23:23 被阅读613次

今天出了个新闻macOS 的安全漏洞,macOS High Sierra可以使用不输入密码直接输入root就能获得管理员权限登录系统,这里推荐一种解决方案《macOS 系统 Root 管理员权限漏洞解决方案》

言归正传


很简单的一个功能,把字符串写入macos的文件中,虽然功能看似简单,但是涉及到一下文件的操作需要记录并提示一下。
其实核心代码就一句 writeToFile 但是有一些细节需要注意。

macos开发中的文件夹操作与iOS中的异同

整体来说ios和macos开发差不多,对于UI层面,只需把UI换成NS就好,内部方法都类似,此例子中文件操作需要注意几个小问题

#0x01 沙盒与绝对路径

ios中只能操作沙盒路径,每个app都是独立的,然而到了macos中的路径并不是沙盒,而是操作系统的真实路径,对于这个是比较方便使用的,如可以使用NSDesktopDirectory表示的就是桌面,NSDocumentDirectory就是Document文件夹。操作第一步还是使用NSFileManager defaultManger获取操作管理实例

#0x02 创建文件夹和文件先后顺序

为了写入文件,首先要创建文件,如果直接使用createFileAtPath会直接出错,此时应该要用createDirectoryAtPath先把文件夹创建起来之后才用创建文件方法。

#0x03 URLsForDirectory的使用

这个方法是返回文件夹的所有url路径,注意所有元素是NSURL类型的,放在一个数组里面,而不是string,网上有人把它当做是string,这就出错了。注意取文件路径的时候需要使用relativePath,会把file://去掉,如果用绝对路径absolutePath会带上file://,如果用这个去创建文件夹就会出错。

#0x04 操作错误的获取

为了清晰的明白错误,减少掉坑里最好使用NSError,这样会让你减少调试出错的几率和时间。

下面是代码放送


-(void)writetofile:(NSString *)string{
    
    NSFileManager *fm = [NSFileManager defaultManager];
    //创建NSFileManager实例
    //获得文件路径,第一个参数是要定位的路径 NSApplicationDirectory-获取应用程序路径,NSDocumentDirectory-获取文档路径
    //第二个参数是要定义的文件系统域
    NSArray *paths = [fm URLsForDirectory:NSDesktopDirectory inDomains:NSUserDomainMask];
    //沙盒路径
    NSURL *path = [paths objectAtIndex:0];
    //要查找的文件
    
    NSString *myFiledFolder = [path.relativePath stringByAppendingFormat:@"/xxxx"];
    
    NSString *myFiled = [myFiledFolder stringByAppendingFormat:@"/%.0f.json",[NSDate timeIntervalSinceReferenceDate]];
    //判断文件是否存在
    BOOL result = [fm fileExistsAtPath:myFiled];
    //如果文件不存在
    if (!result) {
        NSString *content = string;
        //创建文件夹
        [fm createDirectoryAtPath:myFiledFolder withIntermediateDirectories:YES attributes:nil error:nil];
        //文件
        BOOL isCreate = [fm createFileAtPath:myFiled contents:[content dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
        if (isCreate) {
            NSLog(@"创建成功");
            NSError * error;
//            [string writeToFile:myFiled atomically:YES encoding:NSUTF8StringEncoding error:&error];
            
            if (error) {
                NSLog(@"save error:%@",error.description);
            }
        }
        else{
            NSLog(@"🌺 创建失败");
        }
    }
    
    NSLog(@"OUTPUT:%@",myFiled);
    
}
欢迎关注公众号

相关文章

网友评论

      本文标题:MACOS开发中的文件操作

      本文链接:https://www.haomeiwen.com/subject/jjkmbxtx.html