Système.IO.IOException: “Le fichier existe” lors de l'utilisation du Système.IO.Chemin d'accès.GetTempFileName() - résolutions?

L'un de mes clients a eu une exception quand il a essayé d'utiliser mon produit. J'ai obtenu la pile des appels de l'exception qui ont eu lieu, dont la partie supérieure est:

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.__Error.WinIOError()
   at System.IO.Path.GetTempFileName()
   at System.Windows.Input.Cursor.LoadFromStream(Stream cursorStream)
   at System.Windows.Input.Cursor..ctor(Stream cursorStream)

Googler cela, j'ai trouvé beaucoup de billets de blog indiquant cette exception est levée lorsqu'il y a plus de 65535 fichiers temporaires dans le dossier %TEMP%, et que la solution est de simplement effacer les anciens fichiers temporaires. Je peux demander au client de le faire, mais ce peut n'être qu'une solution temporaire, ce qui si elles sont régulièrement de course de quelque autre morceau de logiciel qui permet de fréquents appels à GetTempFileName, ce qui rend le problème se reproduira plus et plus?

Je ne peux pas juste par programme effacer le dossier %TEMP%, qui peut en quelque sorte des dommages de quelque chose d'autre, et je ne peux pas éviter d'appeler GetTempFileName (et l'aide de mon propre dossier temp au lieu de cela) que ce n'est pas moi, mais le code WPF c'est en l'appelant.

Est-il une solution permanente à ce problème?

Mise à JOUR: j'ai confirmé que le problème où le dossier %TEMP% déborde les fichiers de log n'est pas causé par mon propre code, et doit être causé par une autre application 3ème partie sur la machine du client. J'ai aussi regardé dans la mise en œuvre de Cursor.LoadFromStream et il n'est sûrement pas la faute - il génère un fichier temp, mais supprime ensuite dans finally bloc.

  • Vous pourriez faire votre propre dossier "Temp" qui est supprimé (dans application data") mais probablement être un ballache modifier toutes les références, bonne question
  • La question n'est pas liée à WPF, supprimé la balise. Aussi, pourquoi ne pas simplement corriger le code, qui produit aussi de nombreux fichiers temporaires sans suppression?
  • Je ne peux pas le faire parce que c'est WPF Cursor.LoadFromStream c'est de générer le fichier temp. @Dennis C'est lié à WPF Cursor.LoadFromStream classe. Le code malveillant qui produit alors de nombreux fichiers temporaires sans suppression pourrait même ne pas être le mien, et j'avais encore besoin de l'adresse de l'exception.
  • Pouvez-vous savoir quelle application est en laissant derrière tous ces fichiers temporaires? C'est votre demande? Si WPF est la création de ces fichiers temp elle-même, avez-vous vérifié qu'il est de les supprimer quand ils ne sont plus nécessaires?
  • Je pense que votre seule option est alors de try/catch de l'OIE, et de demander à l'utilisateur s'il veut que vous supprimer les fichiers temporaires et essayez à nouveau
  • C'est un problème plus général que " la fixation de votre code, j'ai remarqué un comportement similaire avec le Poulpe déployer 3.1.3 qui ne parvient pas à nettoyer après lui-même. J'ai pour supprimer manuellement les fichiers temporaires du dossier pour la même raison.

InformationsquelleAutor Omer Raviv | 2013-08-21