[C/WIN32] TÉLÉCHARGEMENT DE FICHIER AVEC API SEULEMENT.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
18 avril 2007 à 21:08
LeFauve42
Messages postés239Date d'inscriptionvendredi 20 octobre 2006StatutMembreDernière intervention20 avril 2009
-
23 avril 2007 à 11:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
LeFauve42
Messages postés239Date d'inscriptionvendredi 20 octobre 2006StatutMembreDernière intervention20 avril 2009 23 avril 2007 à 11:37
Salut,
Je suis peut-etre hors sujet ou je n'ai pas compris l'interet, mais j'ai toujours fait ca avec les api urlmon, et ca a l'air beaucoup plus simple.
Un exemple de prog (vite fait) qui prend en argument une url a telecharger et un nom de fichier pour sauver le contenu:
#include "stdafx.h"
#include
int main(int argc, char* argv[])
{
if(argc<3) return 1;
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 19 avril 2007 à 21:10
J'avais pas testé l'exécutable :P
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 19 avril 2007 à 19:27
Ce qui est marrant avec SAKingdom, c'est que le truc qui sert a rien et qui fait perdre 1 milliardième de seconde au cpu, il le repère tout de suite, alors que le fait que le prog prenne 60 mo de mémoire et qu'il consomme en permanence 10-20% de cpu pendant le download d'un fichier de 50 mo, ça le choque même pas.
Plus serieusement, le HeapAlloc() de la taille du fichier, je pense que ca fait un peu lourd. Et aussi, le bouton download reste disponible lors d'un download, ce qui fait qu'on peut lancer plusieurs fois le même download.
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 19 avril 2007 à 19:02
Oui c'est ce que je me suis dit aussi, je vien de re vérifier et en faite ce que je croyai être des caractères en trop sont en faites des caractères non imprimable qui dans le notepad prête à confusion.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 19 avril 2007 à 17:39
Tu obtenais des caractère en trop ? Ça ne devrait techniquement pas arriver.
Et puis d'ailleurs, WriteFile n'écrira pas le 0 de fin de chaine car tu lui dis d'écrire dwBytesRequired octet alors que le 0 se situe un octet plus loin. Étant donné que seul WriteFile utilise la chaine et qu'il ne prend même pas en compte de 0 de fin de chaine, on devrait pouvoir sans passer sans problèmes.
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 19 avril 2007 à 15:53
ben j'ai remarqué que si je ne mettait pas le zéro de fin de chaîne j'obtenais des caractères en trop. Et pour httpQueryInfo j'avai fait un test de valeur, la fonction renvoie 1 ou 0 mais elle renvoyai tout le temps 0 hors elle fonctionne très bien (sinon on aurai pas la taille du fichier) et cela forcément faisait planter le programme. Tu vas me dire que c'est bizzar, mais pourtant ... En ce qui concerne dwSizeOfByReq, c'est vrai, je vai le faire.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 18 avril 2007 à 21:08
Dans la fonction DownloadFile, à quoi te sert de mettre le 0 de fin de chaine à szBuff si elle est stocké directement dans un fichier ?
Aussi, dwSizeOfByReq pourrait être une macro plutôt qu'une variable vue qu'il n'est pas modifié.
Tu ne test pas non plus la valeur de retour de HttpQueryInfo. J'ai lus dans le MSDN qu'elle pouvait renvoyer une erreur si, par exemple, il n'y a pas assez de mémoire pour le buffer etc.
23 avril 2007 à 11:37
Je suis peut-etre hors sujet ou je n'ai pas compris l'interet, mais j'ai toujours fait ca avec les api urlmon, et ca a l'air beaucoup plus simple.
Un exemple de prog (vite fait) qui prend en argument une url a telecharger et un nom de fichier pour sauver le contenu:
#include "stdafx.h"
#include
int main(int argc, char* argv[])
{
if(argc<3) return 1;
LPCSTR url = argv[1];
LPCSTR file = argv[2];
HRESULT hR = URLDownloadToFile(NULL,url,file,0,NULL);
if(!SUCCEEDED(hR)) return 1;
return 0;
}
Eric
19 avril 2007 à 21:10
19 avril 2007 à 19:27
Plus serieusement, le HeapAlloc() de la taille du fichier, je pense que ca fait un peu lourd. Et aussi, le bouton download reste disponible lors d'un download, ce qui fait qu'on peut lancer plusieurs fois le même download.
19 avril 2007 à 19:02
19 avril 2007 à 17:39
Et puis d'ailleurs, WriteFile n'écrira pas le 0 de fin de chaine car tu lui dis d'écrire dwBytesRequired octet alors que le 0 se situe un octet plus loin. Étant donné que seul WriteFile utilise la chaine et qu'il ne prend même pas en compte de 0 de fin de chaine, on devrait pouvoir sans passer sans problèmes.
19 avril 2007 à 15:53
18 avril 2007 à 21:08
Aussi, dwSizeOfByReq pourrait être une macro plutôt qu'une variable vue qu'il n'est pas modifié.
Tu ne test pas non plus la valeur de retour de HttpQueryInfo. J'ai lus dans le MSDN qu'elle pouvait renvoyer une erreur si, par exemple, il n'y a pas assez de mémoire pour le buffer etc.