Windows 如何以原子方式替换Web服务器上的文件,使其';s的最新版本是否持续可用?

Windows 如何以原子方式替换Web服务器上的文件,使其';s的最新版本是否持续可用?,windows,perl,Windows,Perl,我正在做一个项目,生成Google Earth KML文件,并将文件保存到一个可通过web访问的目录中。它使用ActivePerl在Windows上运行。(不是我喜欢的平台,但这是我必须使用的。) 我使用的方法是:写入temp.kml,使用File::Copy将temp.kml复制到real.kml。这种情况每秒发生一次 Google Earth通过apache2网络服务器获取这个real.kml。问题是,当Google Earth在将temp.kml复制到real.kml的同时获取real.k

我正在做一个项目,生成Google Earth KML文件,并将文件保存到一个可通过web访问的目录中。它使用ActivePerl在Windows上运行。(不是我喜欢的平台,但这是我必须使用的。)

我使用的方法是:写入temp.kml,使用File::Copy将temp.kml复制到real.kml。这种情况每秒发生一次

Google Earth通过apache2网络服务器获取这个real.kml。问题是,当Google Earth在将temp.kml复制到real.kml的同时获取real.kml时,会抛出错误


我知道这很有可能是不可避免的,但有什么方法可以将抛出错误的频率降至最低?

与其复制文件,不如在处理完成后将其从临时目录移动到web目录?如果临时目录与web目录位于同一文件系统中,则只会导致文件名更改,而内容保持不变。比赛状态出现的可能性应该更小


您是复制到real.kml还是重命名?您使用这两个术语。我使用copy()作为File::copy的一部分。我现在正在按照魔术师的建议测试move()。为了清楚起见,我更新了这个问题。我认为这将消除Linux上的竞争条件。到目前为止,我一直在对它进行压力测试,但无法在windows上提出竞争条件。这似乎是我一直在寻找的修复方法,谢谢!