Você pode me dizer se é possível saber o tamanho de um arquivo antes de ele ser lido? Isso é para poder fazer uma estimativa da porcentagem de dados carregados no caso de grandes volumes e velocidades lentas.
Você pode me dizer se é possível saber o tamanho de um arquivo antes de ele ser lido? Isso é para poder estimar a porcentagem de dados baixados no caso de grandes volumes e velocidades lentas.
Acho que é possível. E você encontrará isso na descrição msdn do wininet.dll.
Você pode me dizer se é possível saber o tamanho de um arquivo antes de ele ser lido? Isso é para poder fazer uma estimativa da porcentagem de dados carregados no caso de grandes volumes e velocidades lentas.
Acho que sim, e você a encontrará na descrição do msdn do wininet.dll.
Suponho que esse seria um bom tópico para um artigo com a divulgação completa do uso do wininet.dll
Você pode me dizer se é possível saber o tamanho de um arquivo antes de ele ser lido? Isso é para poder fazer uma estimativa da porcentagem de dados baixados no caso de grandes volumes e velocidades lentas.
É possível se o servidor informar o tamanho do conteúdo.
Para obter informações sobre a solicitação, você pode usar a função HttpQueryInfo do wininet.dll - essa função retorna as informações necessárias para a matriz especificada em forma de cadeia de caracteres.
Exemplo de uso:
Na seção #import, adicione uma descrição:
int HttpQueryInfoW(int hRequest,int dwInfoLevel,uchar &lpvBuffer[],int &lpdwBufferLength,int &lpdwIndex);
adicione também
#define HTTP_QUERY_CONTENT_LENGTH 5Então, no código, após chamar InternetOpenUrlW e obter hURL, você precisa adicionar o código:
int BufLen=2048; int ind=0; uchar buf0[2048]; string s=""; int ContentSize_HttpQueryInfoW=0; int iRes; iRes=HttpQueryInfoW(hURL,HTTP_QUERY_CONTENT_LENGTH,buf0,BufLen,ind); if(iRes<=0) { Print("Error in call of HttpQueryInfoW()"); } else { s=""; for(int k=0;k<BufLen;k++) { s=s+CharToString(buf0[k]);} Print("HTTP_QUERY_CONTENT_LENGTH:",s); if (StringLen(s)>0) ContentSize_HttpQueryInfoW=StringToInteger(s); Alert("Tamanho do conteúdo=",ContentSize_HttpQueryInfoW); }
Em nosso exemplo de teste do yandex.ru, recebemos "Content size= 44649", que corresponde ao tamanho do arquivo baixado. Ou seja, antes do início do download (InternetReadFile), sabemos o tamanho do conteúdo.
Esse recurso foi adicionado à versão atual do script.
Obrigado pelo esforço!
Funciona perfeitamente!
Quando tento executá-lo, o metatrader fecha com um erro fatal. Alguma solução?
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
WININET_TEST:
Aqui está um exemplo simples que mostra como fazer download de uma página (arquivo) a partir da Internet usando a biblioteca wininet.dll.
Autor: MetaQuotes Software Corp.