cocoa - 如何安全地写入 Cocoa 中的给定文件路径,并在必要时添加数字后缀?

标签 cocoa file naming

我们想要写入给定目录中的“foo.txt”。如果“foo.txt”已经存在,我们要写入“foo-1.txt”,依此类推。

有一些代码片段试图回答这个问题,但没有一个是令人满意的。例如。 this solution at CocoaDev使用 NSFileManager 测试路径是否存在以创建安全路径。然而,这会导致获取路径和写入路径之间出现明显的竞争条件。尝试原子写入并在失败时循环数字后缀会更安全。

加油!

最佳答案

使用带有 O_EXCLO_CREAT 选项的 open 系统调用。如果该文件尚不存在,open 将创建它,打开它,并将文件描述符返回给您;如果确实存在,open 将失败并将 errno 设置为 EEXIST

从这里开始,应该很明显如何构造尝试递增文件名的循环,直到返回文件描述符或构造太长的文件名。对于后一点,请确保在 open 失败时检查 errno - EEXISTENAMETOOLONG 只是其中两个您可能会遇到的错误。

关于cocoa - 如何安全地写入 Cocoa 中的给定文件路径,并在必要时添加数字后缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/770727/

相关文章:

c - 从字符串数组中的字符串中删除空格

filesystems - 什么是各种平台的保留文件名?

javascript - 将查询结果导出到json文件

c - 使用 fgets 和 sscanf 读取以逗号分隔的文件行

objective-c - 比较 Cocoa 中的日期

cocoa - 使用 MenuItem 的可滚动菜单

architecture - 在命名空间中分组与为类添加前缀

名称中带有版本的类的 Java 命名约定?

Objective-C:@synchronized最佳使用

arrays - 将 swift 数组的元素分配给 userdata 参数会触发 didSet