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

qwz*_*bug 5 cocoa naming file

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

有几个代码片段试图回答这个问题,但没有一个是完全令人满意的.例如,CocoaDev上的此解决方案使用NSFileManager来测试是否存在创建安全路径的路径.然而,这导致在获得路径和写入路径之间存在明显的竞争条件.尝试原子写入会更安全,并在失败时循环数字后缀.

去吧!

Pet*_*sey 1

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

\n\n

从这里开始,应该很明显如何构造尝试递增文件名的循环,直到返回文件描述符或构造太长的文件名。对于后一点,请确保检查“ errnofails open\xe2\x80\x94” EEXIST,这ENAMETOOLONG只是您可能遇到的两个错误。

\n