2010-11-23 25 views
2

En perl:Rétrécissement du fichier qui est ouvert en lecture/écriture

J'ai un fichier ouvert en lecture/écriture, avec un verrouillage exclusif.

open($f, "+< $filename");
flock($f, LOCK_EX);

Si j'écris plus de données dans le fichier qu'il a auparavant occupé, le fichier se développera.
Si j'écris moins de données, mes nouveaux contenus sont au début, mais l'ancien contenu est toujours là à la fin du fichier.

Ce n'est pas surprenant, mais ce n'est pas ce que je veux.

Existe-t-il un moyen simple de réduire le fichier lorsqu'il est ouvert en lecture/écriture? Fondamentalement, je veux lui dire de terminer le fichier exactement à cette position d'octet.

Je sais que je peux l'ouvrir différemment, et j'envisage de le faire, mais une correction d'une ligne serait bien.

+0

Je suggère de tester le résultat de l'ouverture, flock, tronquer, etc – hpavc

+0

@ hpavc, ou utiliser [autodie] (http://search.cpan.org/perldoc?autodie). – cjm

+0

Je teste les résultats de toutes ces commandes. Il suffit de les découper pour la brièveté. – Brock

Répondre

1
+0

Vous gagnez tous les deux un cookie. Je ne peux pas accepter vos réponses pendant 9 minutes (Pourquoi est-ce?). – Brock

+0

J'ai même cherché le mot tronqué, et j'ai réussi à le manquer. Merci. – Brock

1

fait, je ne sais pas perl, mais comme ftruncate(2) serait la fonction C, peut-être this aide?