2009-06-12 4 views
1

J'ai rencontré un problème en raison du téléchargement dans un fichier local qui l'a verrouillé jusqu'à ce que j'écrase le script ruby. Sur une intuition, j'ai changé la forme de l'appel et maintenant il ne verrouille pas le fichier. Est-ce que quelqu'un peut me dire pourquoi le deuxième formulaire ci-dessous ne verrouille pas le fichier, mais le premier fait?Verrouillage du fichier open-uri Ruby

Cette forme verrouille le fichier local:

open(ver_local_zip, "w+").write(open(remote_zip, :proxy=>ftp_proxy).read) 

Ce formulaire ne verrouille pas le fichier:

open(ver_local_zip, "w+") { |f| f.write(open(remote_zip, :proxy=>ftp_proxy).read) } 

Merci.

Répondre

2

L'appel de la méthode open avec un bloc ferme généralement le fichier immédiatement après l'exécution du bloc. Sans un bloc, ouvrir un fichier (handle) qui sera libéré lors de la prochaine garbage collection.

+0

Ce que je soupçonnais. Merci de répondre. – digitalsanctum

+1

Notez que vous pouvez (et devez) libérer le handle retourné manuellement lors de l'utilisation de la première méthode plutôt que d'attendre le GC. – Eli

Questions connexes