我有一个很常见的情况。我有一个文件,我需要完全覆盖新的内容该文件。然而,原始文件是在每个页面加载(这是一个Web应用程序)进行访问,所以它不能缺少的很长时间。数毫秒是行(尽管不是理想的),第二也不行。

现在我写一个临时文件在同一目录,然后重命名该临时文件复制到新文件的名称做到这一点。我只是用正常的文件:: Temp和“重命名”要做到这一点,在Perl。我想知道 - 有一些其他建议/更好的方式来做到这一点?最好一个不需要CPAN模块,因为这是在我的系统唯一的地方,我需要做到这一点,我不想只为这一个全新的依赖关系。

哦,所有这一切都必须在Windows,Linux,BSD,Mac OS X,Solaris和大多数其他常见的平台上工作。

这里是有问题的代码 ,对于那些有兴趣。

有帮助吗?

解决方案

您方法似乎就好了。它的快速,它的原子,它仅使用核心模块和文件::温度是应对临时文件的安全方式。你还需要什么呢?

其他提示

我会做你正在做同样的方式。至少在Unix类型的操作系统,一个文件重命名被保证是原子这样就不会有任何时刻,其中要么是原始或新的文件是不存在。

重命名是足够的。但是:

在竞争条件风险的临时文件?文件名应为随机,所以没有人可以通过将自己的文件引起的问题。如果可能的话使用的一个接口来mkstemp()。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top