用Swift的FileHandle进行文件写入

在项目中我们经常有针对二进制或者文本文件进行局部读写、追加数据等需求。在C语言里用fopen系列函数就能解决。而在Swift语言里可以通过FileHandle来处理。

下面通过代码示例来讲解下FileHandle的用法。

首先先定义一个文件路径,作为测试文件

let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + "test.txt"

接下来判断文件是否存在,不存在就创建。

注意:由于FileHandle的创建要求文件必须存在,这和C语言的fopen不同,C语言的fopen可以负责在文件不存在时创建,而FileHandle不行。

if !FileManager.default.fileExists(atPath: path) {
    FileManager.default.createFile(atPath: path, contents: nil, attributes: nil)
}

接下来,我们创建一个FileHandle

let fileHandle = FileHandle(forWritingAtPath: path)!

简化起见我这里用“!强制类型为非空,实际开发中请用if分支,不再赘述。

将文件指针移动到文件末尾。

fileHandle.seekToEndOfFile()

进入写入数据的阶段,我这里写入字符串hello, world!

fileHandle.write("hello, world!".data(using: .utf8)!)

最后,记得要关闭文件。

try? fileHandle.close()

文件关闭后,读一下现在文件里的数据并且打印出来。

if let content = try? String(contentsOfFile: path, encoding: .utf8) {
    print(content)
}

如果是首次运行,打印结果是hello, world!,如果再次运行,结果会变成hello, world!hello, world!,依此类推。

完整代码示例:

let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + "test.txt"
if !FileManager.default.fileExists(atPath: path) {
    FileManager.default.createFile(atPath: path, contents: nil, attributes: nil)
}

let fileHandle = FileHandle(forWritingAtPath: path)!
fileHandle.seekToEndOfFile()
fileHandle.write("hello, world!".data(using: .utf8)!)
try? fileHandle.close()

if let content = try? String(contentsOfFile: path, encoding: .utf8) {
    print(content)
}

其它分享:

2021年遭遇苹果审核2.3.1的开发过审经历

4.2、4.3、Other和封号相关的技术性应对方案

如何有效的向苹果哭诉


移动开发者的小伙伴们可以加我的公众号风海铜锣的加群菜单栏中申请加群完成加群申请,一起共同进步。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值