J'ai une classe FILEUPLOADER qui peut éventuellement recevoir un fichier ZIP qu'il extrait à un emplacement temporaire et renvoie les chemins de fichiers.
de ce que j'ai compris, implémentant l'interface Ce n'est pas ce qui ne semble pas être le cas Cependant, quelqu'un peut-il expliquer comment je pourrais aller sur ce que je suis en train d'essayer d'atteindre? p> im tente d'obtenir le fichier fichier pour supprimer tous les fichiers temporaires après la méthode ImportsFile () terminée P> P> Idisposable code> sur le Classe FileUploader et à l'aide de la méthode code> Dispose code> pour supprimer tous les fichiers temporaires rendrait la classe se nettoyer dès que sa référence est tombée hors contexte? P>
Pour clarifier, mon code est le suivant: p>
7 Réponses :
"est tombé hors contexte" n'est pas clair; Vous devriez faire: sans et il est ce em> qui provoque le nettoyage déterministe. P> P > en utilisant code>, il n'y a pas de manipulation spéciale. Ceci est ensuite traduit par le compilateur en quelque chose comme: p>
Dispose code> n'est automatique que si vous enveloppez le contexte avec le
à l'aide du mot-clé CODE>:
using (FileUploader uploader = new FileUploader(...))
uploader.UploadFiles();
Comme d'autres personnes ont déjà dit, Cet article illustre le concept, ainsi que de donner des idées sur la manière dont Finalisation fonctionne. P> Dispose code> n'est pas appelé automatiquement à moins que le contexte soit enveloppé avec le mot-clé code>. Vous pouvez toutefois mettre en œuvre à la fois les modèles d'élimination et de finalisation (appelez le
Disposer code> à partir d'un finaliseur / destructeur). De cette façon, vous avez un sans danger d'échec et supprime vos fichiers temporaires, même si votre code n'appelle pas
Dispose directement (car le collecteur des ordures appellera finalement). P>
Cela étant dit, je pense que l'approche la plus propre serait d'utiliser un bloc d'utilisation autour de votre fichier FileduLoader.
Donc, le Dispose code> sera éventuellement appelé sur cet objet? La raison pour laquelle je demande est parce que je n'en teniez pas vraiment lorsque les fichiers temporaires sont supprimés, tant qu'ils sont finalement supprimés :)
Il y a des circonstances exceptionnelles lorsqu'un finaliseur ne sera pas appelé par le temps d'exécution, mais vous pouvez en général vous attendre à ce qu'il fonctionne à un peu de temps inconnu après la sortie de l'objet.
Voir MSDN.MICROSOFT.COM/EN-US/ Bibliothèque / B1YFKH5E (v = vs.100) .aspx pour un exemple.
Vous pouvez implémenter les finaliseurs de sorte que si vous oubliez d'appeler Mais c'est disposer code> (que vous ne devez vraiment pas!) et appelez le
Disposer code> dans votre finisseur. Ce sera appelé lorsque l'objet est en train d'être des ordures recueillies - mais c'est indéterminé, c'est-à-dire. Pas moyen de le savoir quand il sera appelé. P>
Comme tout le monde dit, votre meilleur pari est de l'envelopper dans une déclaration avec l'utilisation de la méthode d'élimination. Je pense que c'est ainsi que Microsoft recueille pour utiliser tout ce qui implémente Idisose, au moins basé sur leurs règles d'analyse de code. p>
Vous devrez mettre en œuvre correctement Idisposable. Comme la classe ci-dessous.
using(TempStorage myStorage = new TempStorage("C:\temp") { // rest of the main method here... }
S'il n'y a pas de ressources non gérées, il n'est pas nécessaire de mettre en œuvre le modèle d'élimination. Il suffit d'utiliser la méthode code> Disposer code> pour supprimer le fichier temporaire.
Idisposable est approprié dans les cas où un objet change quelque chose en dehors de lui-même de manière à être nettoyé à un moment donné avant que l'objet ne disparaisse. La création de fichiers temporaires semblerait être admissible. Il y a cependant un couple de mises en garde: p>
Je n'aime pas particulièrement les finaliseurs; L'accent devrait être mis sur la fabrication du débarras. P>
Pouvez-vous nous dire ce que
FileduPloader code> fait et comment il se rapporte à décompresser? Je pourrais fournir un exemple
zipextractter code> en tant que
Idisposable code>, mais cela ne couvrirait probablement pas la vraie utilisation complètement ..
Fileduploader code> Accepte simplement un fichier de formulaire publié et renvoie l'emplacement physique du fichier Temp chargé. Toutefois, si le fichier posté est un fichier zip, il l'extrait et renvoie tous les emplacements des fichiers temporaires extraits.