Quelle est la meilleure façon de faire une croix-plate-forme, le remplacement du fichier atomique en Perl?

StackOverflow https://stackoverflow.com/questions/392016

Question

J'ai une situation très courante. J'ai un fichier, et je dois remplacer entièrement ce fichier avec un nouveau contenu. Cependant, le fichier original est accessible sur chaque chargement de page (ce qui est une application web), de sorte qu'il ne peut manquer très longtemps. A quelques ms est OK (mais pas idéal), une seconde est pas OK.

En ce moment je fais en écrivant un fichier temporaire dans le même répertoire, puis renommer le fichier temporaire au nom du nouveau fichier. Je suis juste en utilisant le fichier normal :: Temp et « Rename » pour ce faire, en Perl. Je me demandais - est-il une autre recommandation / meilleure façon de le faire? De préférence, qui ne nécessite pas un module CPAN, comme cela est le seul endroit dans mon système que je dois faire, et je ne veux pas une nouvelle dépendance entière juste pour cela.

Oh, et tout cela doit fonctionner sous Windows, Linux, BSD, OS X, Solaris, et la plupart des autres plates-formes communes.

Voici le code en question , pour les personnes intéressées.

Était-ce utile?

La solution

Votre méthode semble très bien. Il est rapide, il est atomique, il utilise les modules de base, et File :: Temp est un moyen sûr de traiter les fichiers temporaires. Que avez-vous besoin?

Autres conseils

Je le ferais de la même façon que vous le faites. Au moins sur les systèmes d'exploitation de type Unix, un changement de nom de fichier est garantie à être atomique de sorte que vous n'avez des instants où l'original ou les nouveaux fichiers n'est pas là.

Renommer suffit. Cependant:

Votre fichier temporaire à risque pour la course? Le nom du fichier doit être aléatoire pour que personne ne peut poser des problèmes en insérant leur propre fichier. Utilisez une interface mkstemp () si possible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top