datei herunter laden
-
moien,
wie kann ich eine datei herunter laden?
von google.de/index.htm auf C:\ oder sodanke
-
Vielleicht kannst du mit folgendem Auszug aus einem Mini-Projekt von mir was anfangen:
__fastcall TDownloadThread::TDownloadThread(bool CreateSuspended, AnsiString loadFromUrl, AnsiString saveToFileName, TForm* form, HWND progressBar) : TThread(CreateSuspended) { LoadFromURL = loadFromUrl; SaveToFileName = saveToFileName; UpdateForm = form; hProgressBar = progressBar; FreeOnTerminate = true; } //--------------------------------------------------------------------------- void __fastcall TDownloadThread::Execute() { DownloadFile(); } //--------------------------------------------------------------------------- void __fastcall TDownloadThread::DownloadFile() { HINTERNET hInternet; HINTERNET hFile; HGLOBAL hGlobal; FILE* fFile; CHAR* szBuf; BOOL bGO = TRUE; DWORD dwReadSize = 256; CHAR lpszFileSize[15]; INT iStep; DWORD dwDummy; TCHAR szErrBuf[256]; LPCTSTR httpFile = LoadFromURL.c_str(); LPCTSTR targetFile = SaveToFileName.c_str(); // Internet API initialisieren und Handle auf das File bekommen hInternet = InternetOpen("WinINet Sample Program", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if(!hInternet) { ShowLastErrorString(); return; } hFile = InternetOpenUrl(hInternet, httpFile, NULL, 0, INTERNET_FLAG_RELOAD, 0); if(!hFile) { ShowLastErrorString(); InternetGetLastResponseInfo(&dwDummy, szErrBuf, &dwReadSize); MessageBox(NULL, szErrBuf, "Error", MB_OK | MB_ICONINFORMATION); InternetCloseHandle(hInternet); return; } // Größe des Files herausbekommen dwDummy = 15; HttpQueryInfo(hFile, HTTP_QUERY_CONTENT_LENGTH, (LPVOID)lpszFileSize, &dwDummy, NULL); FileSize = atoi(lpszFileSize); if(FileSize == 0) { MessageBox(NULL, "The file you want to download doesn't exist\nor has file size zero", "ERROR", MB_OK|MB_ICONERROR); InternetCloseHandle(hFile); InternetCloseHandle(hInternet); return; } iStep = (FileSize / 100 == 0) ? 1 : FileSize / 100; // Speicher für den Buffer allokieren hGlobal = GlobalAlloc(GMEM_FIXED, iStep + 1); szBuf = (CHAR*)GlobalLock(hGlobal); // Das File downloaden fFile = fopen(targetFile, "w+b"); while(bGO) { if(Stopped) break; bGO = InternetReadFile(hFile, szBuf, iStep, &dwReadSize); if(bGO && dwReadSize == 0) break; szBuf[dwReadSize] = '\0'; fwrite(szBuf, 1, dwReadSize, fFile); DownloadedBytes += iStep; Synchronize(Callback); } fclose(fFile); // Handles schließen und aufräumen GlobalUnlock(hGlobal); GlobalFree(hGlobal); InternetCloseHandle(hFile); InternetCloseHandle(hInternet); } //--------------------------------------------------------------------------- void __fastcall TDownloadThread::Callback() { float fFileSize = (float)FileSize; float fDownloadedBytes = (float)DownloadedBytes; int iPercent = (int)((fDownloadedBytes / fFileSize) * 100.); UpdateForm->Caption = (AnsiString)iPercent + (AnsiString)"% of " + SaveToFileName + (AnsiString)" downloaded"; Application->Title = UpdateForm->Caption; SendMessage(hProgressBar, PBM_SETPOS, iPercent, 0); } //--------------------------------------------------------------------------- void __fastcall TDownloadThread::ShowLastErrorString() { LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR)&lpMsgBuf, 0, NULL ); MessageBox(NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION); LocalFree(lpMsgBuf); } //--------------------------------------------------------------------------- void __fastcall TDownloadThread::Stop() { Stopped = true; } //--------------------------------------------------------------------------- void __fastcall TDownloadThread::DoTerminate() { TThread::DoTerminate(); if(DownloadedBytes < FileSize) { int ans = MessageBox(UpdateForm->Handle, "The file has not been completely downloaded.\ \nDo you want it to be deleted?", "Information", MB_YESNO|MB_ICONINFORMATION); if(ans == IDYES) DeleteFile(SaveToFileName.c_str()); } } //---------------------------------------------------------------------------Ach ja, du musst WinInet.lib dazulinken.
-
Oder mit der Indy-Komponente IdHTTP etwas kürzer:
HTTP->HandleRedirects=true; // die IdHTTP Komponente String Seite=HTTP->Get("http://www.xxxxxxx.de");
-
Oder so:
#include "windows.h" #include "urlmon.h" #pragma comment (lib, "C:\urlmon.lib") URLDownloadToFile(0, "http://abc.de/ab.exe", "C:\\Open.html", 0, 0);
-
wobei
#pragma comment (lib, "C:\urlmon.lib")nur etwas von mir ist da müsstest du gucken wo deine urlmon.lib liegt
-
hmm...
wenn ich das mit der urlmon.lib nehme, und die urlmon.lib wie bei dir auf laufwerk C:/ liegt, muss dann bei jedem, den man das programm gibt nicht auch die urlmon.lib auf C:/ rumgammeln, damit es funzt?
-
Du kannst ja die lib mit dem Programm weitergeben und in dem selbem Ordner speichern. Danach kannst Du sie ja mit Application->ExeName... einbinden.
Die Variante von Christian211(1) ist aber meines Erachtens nach die beste und unkomplizierteste.
Gruss
-
nein die urlmon.lib muss nicht mitgegeben werden die wird so mit eincompiliert