我们想在给定目录中写入"foo.txt".如果"foo.txt"已经存在,我们要写入"foo-1.txt",依此类推.
有几个代码片段试图回答这个问题,但没有一个是完全令人满意的.例如,CocoaDev上的此解决方案使用NSFileManager来测试是否存在创建安全路径的路径.然而,这导致在获得路径和写入路径之间存在明显的竞争条件.尝试原子写入会更安全,并在失败时循环数字后缀.
去吧!
使用open带有O_EXCL和O_CREAT选项的系统调用。如果该文件尚不存在,open将创建它,打开它,并将文件描述符返回给您;如果确实存在,open将会失败并设置errno为EEXIST。
从这里开始,应该很明显如何构造尝试递增文件名的循环,直到返回文件描述符或构造太长的文件名。对于后一点,请确保检查“ errnofails open\xe2\x80\x94” EEXIST,这ENAMETOOLONG只是您可能遇到的两个错误。
| 归档时间: |
|
| 查看次数: |
1058 次 |
| 最近记录: |