Foundation框架-16-文件处理(一)

本章和下一章节主要描述下Foundation框架处理文件的一些API类。

NSFileManager管理目录和文件

文件操作的所有工作基础全是由NSFileManager提供的,它提供了很多实用方法,基本使用方法如下:

主要功能

  • 创建一个新文件。
  • 从现有文件中读取数据。
  • 将数据写入文件。
  • 重命名文件。
  • 删除文件。
  • 测试文件是否存在。
  • 确定文件的大小和其他属性。
  • 复制文件。
  • 测试两个文件的内容是否相同。
  • 创建目录、读取目录的内容,或者删除目录。
  • 链接文件,即同一个文件存在两个不同的名字,有时甚至位于不同的目录中。

文件操作

int main(int argc, const char * argv[]) {@autoreleasepool {//fileNSString *fname = @"testfile";NSFileManager *fm;NSDictionary *attr;//创建文件管理器对象fm = [NSFileManager defaultManager];//当前目录NSString *path = [fm currentDirectoryPath];if([fm fileExistsAtPath: fname] == NO){NSLog(@"file is not exsit");return 1; //文件不存在返回1}//创建一个副本if([fm copyItemAtPath:fname toPath:@"testfile" error:NULL] == NO){NSLog(@"file copy failed");return 2;}//测试两个文件是否一样if([fm contentsEqualAtPath: fname andPath:@"newfile"] == NO){NSLog(@"file copy failed");return 3;}//重命名副本if([fm moveItemAtPath:@"newfile" toPath:@"newfile2" error:NULL]){NSLog(@"file rename failed");return 4;}//得到文件属性if((attr = [fm attributesOfItemAtPath:@"newfile2" error:NULL])==nil){NSLog(@"can't get file attribute");return 5;}//文件大小NSLog(@"file size is %llu", [[attr objectForKey:NSFileSize] unsignedLongLongValue]);//删除原始文件if([fm removeItemAtPath:fname error:NULL] == NO){NSLog(@"file remove failed");return 6;}//读取文件内容NSString *fileContent = [NSString stringWithContentsOfFile:@"newfile2" encoding:NSUTF8StringEncoding error:NULL];}return 0;
}

目录操作

int main (int argc, const char * argv[])
{@autoreleasepool{NSString *dirName = @"testdir";NSString *path;NSFileManager *fm;//需要创建文件管理器的实例fm = [NSFileManager defaultManager];//获取当前目录path = [fm currentDirectoryPath];NSLog (@"Current directory path is %@", path);//创建一个新目录if ([fm createDirectoryAtPath: dirName withIntermediateDirectories: YES attributes: nil error: NULL] == NO) {NSLog (@"Couldn't create directory!");return 1;}//重命名新的目录if ([fm moveItemAtPath: dirName toPath: @"newdir" error: NULL] == NO) {NSLog (@"Directory rename failed!");return 2;}//更改目录到新的目录if ([fm changeCurrentDirectoryPath: @"newdir"] == NO) {NSLog (@"Change directory failed!");return 3;}//获取并显示当前的工作目录path =[fm currentDirectoryPath];NSLog (@"Current directory path is @", path);NSLog (@"All operations were successful!");}return (0);} // main

遍历文件目录

        //方法1NSFileManager *fm1 = [NSFileManager defaultManager];NSString *path = [fm1 currentDirectoryPath];NSDirectoryEnumerator *dirEnum = [fm1 enumeratorAtPath: path];NSLog(@"%@", path);while( (path=[dirEnum nextObject])!=nil ){NSLog(@"%@", path);}//方法2NSArray *dirArray = [fm1 contentsOfDirectoryAtPath:path error:NULL];for (path in dirArray){NSLog(@"%@", path);}

NSData数据缓冲

NSData是一个内存缓冲区用来存储临时数据使用,它可以包含大量的字节,32位系统上最大2G数据,64位系统则没有限制。同样的提供了NSData和NSMutableData两个API,不可变和可变两种,NSData是不可变的创建后可以使用但不能改变其中的值内容。

static void dataFun (void) {const char *string = "Hi there, this is a C string!";NSData *data = [NSData dataWithBytes: stringlength: strlen(string) + 1];NSLog (@"data is %@", data);NSLog (@"%ld byte string is '%s'", [data length], [data bytes]);
} // dataFun2023-12-29 01:24:01.653998+0800 project01[95581:7974119] data is {length = 30, bytes = 0x48692074 68657265 2c207468 69732069 ... 73747269 6e672100 }
2023-12-29 01:24:01.654089+0800 project01[95581:7974119] 30 byte string is 'Hi there, this is a C string!'

读取文件

        NSDate *fileData;fm = [NSFileManager defaultManager];//读取文件内容fileData = [fm contentsAtPath: @"newfile2"];if (fileData == nil){NSLog(@"file read failed");return 1;}//写文件if([fm createFileAtPath:@"newfile3" contents:fileData attributes:nil] == NO){NSLog(@"conld not create the copy");return 2;}

NSPathUtilities文件路径

一个工具包,它里面有很多包装好的类可方便调用。也提供了对路径的操作

路径操作

int main (int argc, const char * argv[])
{@autoreleasepool{NSString *fName = @"path.m";NSFileManager *fm;NSString *path, *tempdir,*extension,*homedir, *fullpath;NSString *components;fm = [NSFileManager defaultManager];//获取临时的工作目录tempdir = NSTemporaryDirectory ();NSLog (@"Temporary Directory is %@", tempdir);//从当前目录中提取基本目录path = [fm currentDirectoryPath];NSLog (@"Base dir is @", [path lastPathComponent]);//创建文件fName在当前目录中的完整路径fullpath = [path stringByAppendingPathComponent: fName];NSLog (@"fullpath to %@ is %@", fName, fullpath);//获取文件扩展名extension = [fullpath pathExtension];NSLog (@"extension for @ is @", fullpath, extension);//获取用户的主目录components = [homedir pathComponents];for ( path in components ){NSLog (@"g@", path);}}return (0);} // main

路径操作常用方法

  • 根据components中的元素构造有效路径:+(NSString *) pathWithComponents: components
  • 析构路径,获得组成此路径的各个部分:-(NSArray *)pathComponents
  • 提取路径的最后一个组成部分:-(NSString *) lastPathComponent
  • 从路径的最后一个组成部分中提取其扩展名:-(NSString *) pathExtension
  • 将path添加到现有路径的末尾:-(NSString *) stringByAppendingPathComponent: path
  • 将指定的扩展名添加到路径的最后一个组成部分:-(NSString *) stringByAppendingPathExtension: ext
  • 删除路径的最后一个组成部分:-(NSString *) stringByDeletingLastPathComponent
  • 从文件的最后一部分删除扩展名:-(NSString *) stringByDeletingPathExtension
  • 将路径中的代字符扩展成用户主目录()或指定用户的主目录(user):-(NSString *) stringByExpandingTildelnPath
  • 尝试解析路径中的符号链接:-(NSString *) stringByResolvingSymlinksInPath
  • 通过尝试解析~、…(父目录符号)、.(当前目录符号)和符号链接来标准化路径:-(NSString *) stringByStandardizingPath

用户路径常用方法

  • NSString *NSUserName (void):返回当前用户的登录名
  • NSString *NSFullUserName (void):返回当前用户的完整用户名
  • NSString *NSHomeDirectory(void):返回当前用户主目录的路径
  • NSString *NSHomeDirectoryForUser (NSString *user):返回用户user的主目录
  • NSString *NSTemporaryDirectory (void):返回可用于创建临时文件的路径目录

应用路径常用方法

为了保存数据直到下一次运行程序仍能够使用,可以使用Documents 目录。每个iOS应用都有自己的Documents 目录供数据写入。函数 NSSearchPathForDirectoriesInDomains 的第一个参数是指定需要查找目录的 路径。应用中的Caches目录也可以用来存储一些数据。对于iOS5来说,Apple鼓励开发者存储持久化数据到云端,表16.5列出了iOS中常用的目录。

  • Documents (NSDocumentDirectory):用于写入应用相关数据文件的目录。在iOS中写入这里的文件能够与iTunes共享并访问,存储在这里的文件会自动备份到iCloud;
  • Library/Caches (NSCachesDirectory):用于写入应用支持文件的目录,保存应用程序再次启动需要的信息。iTunes不会对这个目录的内容进行备份
  • tmp (use NSTemporaryDirecory()):这个目录用于存放临时文件,在程序终止时需要移除这些文件。当应用程序不再需要这些临时文件时,应该将其从这个目录中删除
  • Library/Preferences:这个目录包含应用程序的偏好设置文件。使用NSUserDefaults类进行偏好设置文件的创建、读取和修改

NSProcessInfo文件复制和环境信息

此类可以设置或检索正在运行的进程的信息。比如当前进程的信息、参数、进程标识符等。

复制文件

int main (int argc, const char * argv[])
{@autoreleasepool{NSFileManager *fm;NSString *source,*dest;BOOL isDir;NSProcessInfo *proc = [NSProcessInfo processInfo];NSArray *args = [proc arguments];fm = [NSFileManager defaultManager];//检查命令行中的两个参数if ([args count] != 3) {NSLog (@"Usage: %@ src dest", [proc processName]);return 1;}source = args[1];dest = args[2];//确定能够读取源文件if ([fm isReadableFileAtPath: source]==NO){NSLog (@"Can't read 8e", source);return 2;}//目录文件是否是同一个目录,如果是则添加到目录的结尾[fm fileExistsAtPath: dest isDirectory: &isDir];if (isDir == YES){dest = [dest stringByAppendingPathComponent:[source lastPathComponent]];}//若目标文件已存在,则删除文件[fm removeItemAtPath: dest error: NULL];//执行复制if ([fm copyItemAtPath: source toPath: dest error: NULL] == NO) {NSLog (@"Copy failed!");return 3;}NSLog (@"Copy of 8e to 8 succeeded!", source, dest);}return (0);} // main

常用方法

  • +(NSProcessInfo *) processInfo : 返回当前进程的信息
  • –(NSArray *) arguments: 以NSString对象数组的形式返回当前进程的参数
  • –(NSDictionary *) environment:返回变量/值对词典,以描述当前的环境变量(比如PATH和HOME)及其值
  • –(int) processIdentifier:返回进程标识符,它是操作系统赋予进程的唯一数字,用于识别每个正在运行的进程
  • –(NSString *) processName:返回当前正在执行的进程名称
    –(NSString *) globallyUniqueString:每次调用这个方法时,都返回不同的单值字符串。可以用这个字符串生成单值临时文件名
  • –(NSString *) hostname :返回主机系统的名称(在笔者的OSX系统中,返回的是Steve-Kochans-Computer.local)
  • –(NSUInteger) operatingSystem:返回表示操作系统的数字
  • –(NSString *) operatingSystemName:返回操作系统的名称
  • –(NSString *) operatingSystemVersionString:返回当前操作系统的版本,比如 Version 10.6.7(Build 10J869))
  • –(void) setProcessName: (NSString *) name :将当前进程名称设置为name。应该谨慎地使用这个方法,因为关于进程名称存在一些假设(比如用户默认的设置)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动化测试常见的三大问题及解决方案

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

tensorflow list_files需要注意的点

tensorflow 读取tfrecord的时候 list_files几乎是避不开的函数,在tensorflow的官方文档中写了,list_files 支持正则表达式。 但是这里面有个比较坑的点:我们点开list_files的源码,会发现调用了gen_io_ops.matching_files。这个是t…

【Entity Framework】你必须要了解EF中数据查询之数据加载

【Entity Framework】你必须要了解EF中数据查询之数据加载 文章目录 【Entity Framework】你必须要了解EF中数据查询之数据加载一、概述二、预先加载2.1 包含多个层级2.2 经过筛选的包含 三、显示加载3.1查询关联实体 四、延时加载4.1 不使用代理进行延迟加载 一、概述 Entity…

如何在Python中实现文件读写操作? —— Python文件操作全指南:读写文件的最佳实践

在Python中,读写文件是常见的操作之一。本文将为您提供一些最佳实践,以帮助您在Python中进行文件操作。 打开文件 在Python中,可以使用open()函数打开文件。该函数接受两个参数:文件路径和打开模式。打开模式有许多选项&#xf…

平板拖把头建模

没找到合适的配件,只能自己做了。 difference(){union(){cylinder(11.5,10,10,$fn365);translate([-10,0,0])cube([20,16,11.5]);rotate([0,90,0])translate([-11.5/2,16-3-2,-18])cylinder(2088,3,3,$fn365);}translate([0,0,-1])cylinder(13,2.5,2.5,$fn365); }

飞腾UEFI电源控制选择代码解析

飞腾UEFI电源控制选择代码解析 CPLD 处理方式EC 处理方式注:本文以飞腾UEFI edk-code-4.2.0版本进行说明,如果有朋友需要借鉴,请使用该版本代码。 以D2000打工工具为例,下图打包工具中有选择主板电源管理方式,这里可以选择CPLD、EC、和SE,其中SE代表为X100控制上下电时序…

arm中模/数转换器工作原理以及I2C工作原理

ADC介绍 什么是ADC ADC就是模拟到数字转换器(Analog-to-Digital Converter)的缩写。 它是一种电子设备或模块,S3C2440内部拥有一个ADC外设。用于将连续变化的模拟信号转换为离散的数字信号,以便数字系统(如微处理器、微控制器等)能够对其进行处理和分析。 模拟信号:一…

用Gold-yolo模块改进yolov8模型

gold-yolo论文: https://arxiv.org/pdf/2309.11331.pdf gold-yolo代码: https://github.com/huawei-noah/Efficient-Computing/tree/master/Detection/Gold-YOLO 一 gold模块简介 Gold-Yolo是华为诺亚方舟实验室2023年发布的工作,主要优化检…

护网行动 | 蓝队应急响应流程概述

了解蓝队应急响应的流程 应急响应通常是指为了应对各种意外事件发生前所做的准备,以及在意外事件发生后所采取的措施。 网络安全应急响应是指对已经发生或可能发送的安全事件进行监控、分析、协调、处理、保护资产安全。 网络安全应急响应主要是为了让人们对网络安全…

新拉取的解决方案,dotnet build初始化后重新生成报MSB4018 “GenerateStaticWebAsssetsPropsFile”任务意外失败

拉取abp新解决方案后,执行初始化dotnet build--生成项目和所有的依赖 但是生成仍然报错: 错误 MSB4018 “GenerateStaticWebAsssetsPropsFile”任务意外失败。 System.IO.DirectoryNotFoundException: 未能找到路径“E:\TZKJNet\绿色建材\greeni…

【深度学习】执行wandb sync同步命令报错wandb: Network error (SSLError), entering retry loop

执行wandb sync同步命令报错wandb: Network error (SSLError), entering retry loop 在代码中设置wandb offline的命令 os.environ["WANDB_API_KEY"] "API keys" os.environ["WANDB_MODE"] "offline"日志文件生成后,使…

sqlilabs靶场1—20题学习笔记(思路+解析+方法)

前几个题目较为简单,均尝试使用各种方法进行SQL注入 第一题 联合查询 1)思路: 有回显值 1.判断有无注入点 2.猜解列名数量 3.判断回显点 4.利用注入点进行信息收集 爆用户权限,爆库,爆版本号 爆表,爆列&…

基于springboot的医护人员排班系统

随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了医护人员排班系统的开发全过程。通过分析医护人员排班系统管理的不足,创建了一个计算机管理医护人员排班系统的方案。文章介绍了医护人员排班系统的系统分…

每日一题(PTAL2-006):树的遍历--树的构建,队列

因为要层序遍历&#xff0c;所以我们可以考虑构建一颗二叉树。构建完只有利用队列就可以就行层序遍历。 #include <bits/stdc.h> using namespace std; int p1[35]; int p2[35]; typedef struct Tree {int val;struct Tree* left;struct Tree* right; }TT; typedef TT* …

steam怎么退款?steam退款教程?简单几步即可轻松实现退款

steam怎么退款&#xff1f;steam退款教程&#xff1f;简单几步即可轻松实现退款 说到steam平台大家肯定不会陌生&#xff0c;随着现代的发展&#xff0c;在steam上进行购买游戏已经成了很普遍的东西&#xff0c;但是许多玩家在购买游戏试完之后发现游戏并不符合自己的胃口&…

傅里叶变换例题

目录 傅里叶转化例题: 时移 频移 尺度 时域卷积性质:卷积==乘机

软考证书有用吗?软考证书的含金量大吗?

一、以考代评 通过考试并获得相应级别计算机专业技术资格&#xff08;水平&#xff09;证书的人员&#xff0c;表明其已具备从事相应专业岗位工作的水平和能力&#xff0c;用人单位可根据《工程技术人员职务试行条例》有关规定和工作需要&#xff0c;从获得计算机专业技术资格…

C#创建磁性窗体的方法:创建特殊窗体

目录 一、磁性窗体 二、磁性窗体的实现方法 (1)无标题窗体的移动 (2)Left属性 (3)Top属性 二、设计一个磁性窗体的实例 &#xff08;1&#xff09;资源管理器Resources.Designer.cs设计 &#xff08;2&#xff09;公共类Frm_Play.cs &#xff08;3&#xff09;主窗体 …

Android retrofit

目录 一.简介 二.基本使用 三.注解 四.转换器 五.适配器 六.文件上传与下载 一.简介 A type-safe HTTP client for Android and Java。封装了OkHttp&#xff0c;也是由Square公司贡献的一个处理网络请求的开源项目。 square/retrofit: A type-safe HTTP client for Andr…

【TileServer GL】TileServer GL官方文档翻译

官方文档&#xff1a; maptiler-tileserver: https://maptiler-tileserver.readthedocs.io/en/latest/index.html TileServer GL: https://tileserver.readthedocs.io/en/latest/index.html TileServer GL 说明 1 安装Dockernpm使用npm.js全局安装从源代码本地安装本机依赖项 t…