Le téléchargement d'un fichier en Delphi
Une recherche sur google montre quelques exemples sur la façon de télécharger un fichier en Delphi, mais la plupart sont de buggy et de la moitié du temps à ne pas travailler dans mon expérience.
Je suis à la recherche d'une simple solution robuste qui me permettra de télécharger un seul fichier exe (pour la mise à jour de mon application) et tiendra l'exécution de la mise à jour de thread jusqu'à ce que le téléchargement est terminé ou des erreurs. Le processus est déjà enfilée de sorte que le code de téléchargement devrait tenir l'exécution jusqu'à ce qu'il fait (je l'espère).
Voici deux implémentations, les deux semblent très compliqué
1. http://www.scalabium.com/faq/dct0116.htm
2. http://delphi.about.com/od/internetintranet/a/get_file_net.htm
OriginalL'auteur Daisetsu | 2010-08-17
Vous devez vous connecter pour publier un commentaire.
La deuxième approche est la façon standard de l'utilisation des ressources de l'Internet à l'aide de WinINet, une partie de l'API de Windows. Je l'ai utilisé beaucoup, et il a toujours bien fonctionné. La première approche, je n'ai jamais essayé. (Ni est "très compliqué". Il y aura toujours quelques étapes supplémentaires lors de l'utilisation de l'API de Windows.)
Si vous voulez une méthode très simple, il vous suffit d'appeler
UrlMon.URLDownloadToFile
. Vous n'obtiendrez pas une amende de contrôle (du tout!) à propos de le télécharger, mais c'est très simple.Exemple:
Application.ExeName
avecParamStr(0)
pour supprimer la dépendance sur laForms
unité.Vrai. Mais dans le code de production, vous ne voulez pas enregistrer les fichiers dans le répertoire de l'application, de toute façon, qui est en lecture seule (Program Files), à moins que le programme est portable (fonctionne sur une clé USB par exemple).
Merci pour la réponse Andreas. Je suis allé avec la deuxième approche que j'ai posté depuis vous a dit que c'était la norme, espérons-le, il s'avère être fiable. Merci pour votre effort.
Merci @AndreasRejbrand ! C'est exatcly ce que je cherchais!
OriginalL'auteur Andreas Rejbrand
Pourquoi ne pas faire usage de d'indy. Si vous utilisez le TIdHTTP sa simple
Vous pouvez même ajouter une barre de progression à l'aide de la OnWork et OnWorkBegin Événements
Je ne suis pas sûr si ces cas d'incendie dans le contexte du thread principal, de sorte que toute les mises à jour effectuées à des composants VCL peut être fait en utilisant le tidnotify composant pour éviter problèmes de threading. Peut-être quelqu'un d'autre peut le vérifier.
Si votre application de réseau uniquement pour la procédure de mise à jour - les ensuite à l'aide d'Indy va augmenter .taille de fichier exe.
OriginalL'auteur Michael Taylor
Aide De URLMon.
Je ne le pense pas.
OriginalL'auteur user1141649