Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка файла 
:(
    Опции темы
Danillab
  Дата 14.5.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.4.2007

Репутация: нет
Всего: нет



Подскажите как можно загрузить файл из Интернета и сохранить его.  smile 
Компилятор: VC++ 2005 Pro
PM MAIL   Вверх
jonie
Дата 14.5.2007, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



поиск используй? http://forum.vingrad.ru/topic-139356.html
ну и ссылки снизу


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Danillab
Дата 15.5.2007, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.4.2007

Репутация: нет
Всего: нет



жму: New -> Project -> Windows Forms Application ввожу название nil

в Solution Explorer выбираю nil.cpp в самый конец вставляю:

Код

//чтобы скомпилировалось в VC++, надо
//в "Project|Properties|Linker|Input|Additional Dependencies"
// добавить"Wininet.lib"

#include <wininet.h>
#include <fstream>


const ERROR_TMPFILE_UNOPENED = 10;
const ERROR_UNABLE_INITILIZE_WININET = 11;
const ERROR_CANNOT_OPEN_URL = 12;
const ERROR_UNLOAD_FILE_FROM_URL = 13;


int DownloadFromURL(CString a_URL, CString a_tmpfile)
{
 const BUFSIZE = 8*1024;

 ofstream ofs(a_tmpfile, ios_base::binary);
 if (!ofs) return ERROR_TMPFILE_UNOPENED;

 HINTERNET hNet = ::InternetOpen("Download Image",
                                PRE_CONFIG_INTERNET_ACCESS,
                                NULL,
                                INTERNET_INVALID_PORT_NUMBER,
                                0) ;
 if (!hNet)  return ERROR_UNABLE_INITILIZE_WININET;

 HINTERNET hUrlFile = ::InternetOpenUrl(hNet,
                                a_URL,
                                NULL,
                                0,
                                INTERNET_FLAG_RELOAD,
                                0) ;
 if (!hUrlFile) 
    {
     return ERROR_CANNOT_OPEN_URL;
     ::InternetCloseHandle(hNet);
    }

 char buffer[BUFSIZE];
 DWORD dwBytesRead=0;
 
 do
   {
    if (!InternetReadFile(hUrlFile, buffer, sizeof(buffer), &dwBytesRead))
         return ERROR_UNLOAD_FILE_FROM_URL;
    if (dwBytesRead) {ofs.write(buffer,dwBytesRead);}
        else break;
   } 
   while (true);

 ofs.close();

 ::InternetCloseHandle(hUrlFile);
 ::InternetCloseHandle(hNet);
 return 0;

}
 

жму F8, компилируется и выдает ошибки.

Output:
Код

------ Build started: Project: nil, Configuration: Debug Win32 ------
Compiling...
stdafx.cpp
Compiling...
AssemblyInfo.cpp
nil.cpp
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(58) : error C2146: syntax error : missing ';' before identifier 'HINTERNET'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(58) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(58) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(59) : error C2143: syntax error : missing ';' before '*'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(59) : error C4430: missing type specifier - int assumedidentifier

...

C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(665) : error C2146: syntax error : missing ')' before identifier 'SYSTEMTIME'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(665) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(669) : error C2059: syntax error : ')'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : error C2146: syntax error : missing ';' before identifier 'DECLSPEC_IMPORT'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : error C2086: 'int EXTERN_C' : redefinition
        C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(665) : see declaration of 'EXTERN_C'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : error C2146: syntax error : missing ';' before identifier 'BOOL'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : error C2086: 'int DECLSPEC_IMPORT' : redefinition
        C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(665) : see declaration of 'DECLSPEC_IMPORT'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : error C2146: syntax error : missing ';' before identifier 'STDAPICALLTYPE'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : fatal error C1003: error count exceeds 100; stopping compilation
Generating Code...
Build log was saved at "file://c:\Documents and Settings\Данил\Мои документы\Visual Studio 2005\Projects\nil\nil\Debug\BuildLog.htm"
nil - 283 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


подскажите что я делаю неправильно.
PM MAIL   Вверх
Danillab
Дата 16.5.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.4.2007

Репутация: нет
Всего: нет



я уверен что здесь какая то мелкая ошибка, но я не могу ее найти :(
PM MAIL   Вверх
jonie
Дата 17.5.2007, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



а когда это в С++ можно стало писать так?
Код

const ERROR_TMPFILE_UNOPENED = 10;
без указания типа константы?
-----------
+заголовочные файлы подрубить где все - т.е. обычно stdafx.h
+подрубить перед всем этим windows.h
+использование ofstream тут так невозможно (ofstream находится в пространстве std) т.е. нисать либо std::ofstream .... либо использовать using namespace std;
+убрать бесконечный цикл  while (true); если, конечно,это не предпологалось (а судя по дальнейшему коду нет)
+Windows Forms Application сдается мне что это управляемый С++ .... хотя, он и позволяет использовать неуправляемый код...но как насчет руани я хз.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Danillab
Дата 27.5.2007, 06:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.4.2007

Репутация: нет
Всего: нет



jonie, спасибо за ответы, я просто подумал что код из темы будет нормально компилится.


Сейчас пытаюсь скомпилировать:
Код

#include "stdafx.h"
#include <wininet.h>
#pragma comment(lib, "wininet")

void ddownload(char ot[], char dod[])
{
    HANDLE ih;
    ih = InternetOpen("Microsoft Internet Explorer", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    if (ih == NULL) ih = 0;
    HANDLE fh, f;
    char fbuff[512];
    DWORD r, d, total;
    fh = InternetOpenUrl(ih, ot, NULL, 0, 0, 0);
    if (fh != NULL) {
    f = CreateFile(dod, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
    do {
        memset(fbuff, 0, sizeof(fbuff));
        InternetReadFile(fh, fbuff, sizeof(fbuff), &r);
        WriteFile(f, fbuff, r, &d, NULL);
        total = total + r;
    } while (r > 0);
    CloseHandle(f);
    InternetCloseHandle(fh);
    MessageBox(0,"download complete!","ok",MB_OK);
    } else {
    MessageBox(0,"download failed!:(","ok",MB_OK);
    }

}


вешаю на нажатие кнопки
Код

        private void button1_Click(object sender, EventArgs e)
        {
            ddownload("http://localhost/logo.jpg", "c:\\logo.jpg");
        }



При компиляции получаю такие ошибки:
Код

------ Build started: Project: nil1, Configuration: Debug Win32 ------
Compiling...
wininet.cpp
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(58) : error C2146: syntax error : missing ';' before identifier 'HINTERNET'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(58) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(58) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(59) : error C2143: syntax error : missing ';' before '*'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(59) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(59) : error C2378: 'HINTERNET' : redefinition; symbol cannot be overloaded with a typedef
        C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(58) : see declaration of 'HINTERNET'
...

C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(665) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(665) : error C2065: 'CONST' : undeclared identifier
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(665) : error C2146: syntax error : missing ')' before identifier 'SYSTEMTIME'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(665) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(669) : error C2059: syntax error : ')'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : error C2146: syntax error : missing ';' before identifier 'DECLSPEC_IMPORT'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : error C2086: 'int EXTERN_C' : redefinition
        C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(665) : see declaration of 'EXTERN_C'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : error C2146: syntax error : missing ';' before identifier 'BOOL'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : error C2086: 'int DECLSPEC_IMPORT' : redefinition
        C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(665) : see declaration of 'DECLSPEC_IMPORT'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : error C2146: syntax error : missing ';' before identifier 'STDAPICALLTYPE'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\wininet.h(671) : fatal error C1003: error count exceeds 100; stopping compilation
Build log was saved at "file://c:\Documents and Settings\Данил\Мои документы\Visual Studio 2005\Projects\nil1\nil1\Debug\BuildLog.htm"
nil1 - 283 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0692 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.