Frage

Ich habe eine sehr häufige Situation. Ich habe eine Datei, und ich muss ganz die Datei mit neuen Inhalten überschrieben. Jedoch wird die Originaldatei auf jeder Seite Last zugegriffen wird (dies ist ein Web-App), so kann es nicht für sehr lange fehlen. Ein paar ms ist OK (wenn auch nicht ideal), eine zweite ist nicht in Ordnung.

Im Moment mache ich das durch eine temporäre Datei in das gleiche Verzeichnis zu schreiben und dann die temporäre Datei der neuen Datei mit dem Namen umbenennen. Ich verwende nur die normalen File :: Temp und „Umbenennen“, dies zu tun, in Perl. Ich habe mich gefragt - gibt es einen anderen empfohlene / besseren Weg, dies zu tun? Vorzugsweise eines, das nicht ein CPAN-Modul benötigt, da dies der einzige Ort in meinem System, das ich brauche, dies zu tun, und ich weiß nicht eine ganz neue Abhängigkeit nur für diese will.

Oh, und all dies hat unter Windows zu arbeiten, Linux, BSD, OS X, Solaris und die meisten anderen gängigen Plattformen.

Hier ist der Code in Frage , für die Interessenten.

War es hilfreich?

Lösung

Ihre Methode scheint gut. Es ist schnell, es ist atomar, verwendet es nur Core-Module und File :: Temp ist eine sichere Art und Weise mit temporären Dateien umgehen. Was brauchen Sie?

Andere Tipps

Ich würde tun es die gleiche Art und Weise Sie es tun. Zumindest auf dem Unix-Typ OSes wird eine Dateiumbenennungs- Atom sein garantiert, so dass Sie keine Zeitpunkt, wo entweder das Original oder die neuen Dateien nicht da sind.

Rename ist ausreichend. Allerdings:

Ist Ihre temporäre Datei mit einem Risiko für Rennbedingungen? Der Dateiname soll randomisiert werden, damit niemand kann Probleme verursachen, indem sie ihre eigene Datei einfügen. Verwenden Sie eine Schnittstelle mkstemp (), wenn möglich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top