Question

  1. J'ai créé un fichier temporaire.
  2. Ajout des données dans le fichier créé.
  3. sauvé puis essayer de le supprimer.

Mais je reçois WindowsError. J'ai fermé le dossier après l'avoir modifié. Comment puis-je vérifier quel autre processus accède au fichier.

C:\Documents and Settings\Administrator>python
Python 2.6.1 (r261:67517, Dec  4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tempfile
>>> __, filename = tempfile.mkstemp()
>>> print filename
c:\docume~1\admini~1\locals~1\temp\tmpm5clkb
>>> fptr = open(filename, "wb")
>>> fptr.write("Hello World!")
>>> fptr.close()
>>> import os
>>> os.remove(filename)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
WindowsError: [Error 32] The process cannot access the file because it is being used by
       another process: 'c:\\docume~1\\admini~1\\locals~1\\temp\\tmpm5clkb'
Était-ce utile?

La solution

De la :

  

mkstemp () retourne un tuple contenant une poignée au niveau du système d'exploitation à un fichier ouvert (comme cela serait renvoyé par os.open ()) et le chemin d'accès absolu de ce fichier, dans cet ordre. Nouveau dans la version 2.3.

Alors, retourne mkstemp fois la poignée de fichiers OS et le nom du fichier temporaire. Lorsque vous ouvrez le fichier temporaire, le descripteur de fichier retourné d'origine est toujours ouverte (personne ne vous empêche d'ouvrir deux fois ou plus le même fichier dans votre programme).

Si vous voulez utiliser sur cette poignée de fichiers OS comme un objet fichier python, vous pouvez:

>>> __, filename = tempfile.mkstemp()
>>> fptr= os.fdopen(__)

et puis continuer avec votre code normal.

Autres conseils

Le fichier est toujours ouvert. Pour ce faire:

fh, filename = tempfile.mkstemp()
...
os.close(fh)
os.remove(filename)

Je crois que vous devez libérer la fptr pour fermer le fichier proprement. Essayez de régler fptr Aucun.

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