Laden Sie eine Datei in C++ herunter

Sheeraz Gul 15 Februar 2024
Laden Sie eine Datei in C++ herunter

Dieses Tutorial zeigt, wie Sie eine Datei mit C++ herunterladen.

Laden Sie eine Datei in C++ herunter

Das Herunterladen einer Datei mit C++ ist ein einfacher Vorgang, der mit der win32-API [URLDownloadToFile]) durchgeführt werden kann. Diese API kann über den angegebenen Link eine Datei auf unseren Computer herunterladen.

Wir können das heruntergeladene Element je nach Bedarf als Datei oder Zeichenfolge speichern. Beides kann mit unterschiedlichen Operationen durchgeführt werden.

Beginnen wir mit dem Herunterladen als Datei.

C++-Download als Datei

Wie oben erwähnt, können wir die win32-API [URLDownloadToFile]) verwenden, wir können jede Datei über den angegebenen Link herunterladen. Die Datei wird im selben Arbeitsverzeichnis gespeichert.

Versuchen wir es an einem Beispiel.

#include <windows.h>

#include <cstdio>
#include <string>
#pragma comment(lib, "Urlmon.lib")

using namespace std;

int main() {
  // the URL from where the file will be downloaded
  string SourceURL = "https://picsum.photos/200/300.jpg";

  // destination file
  string DestinationFile = "DemoFile.jpg";

  // URLDownloadToFile returns S_OK on success
  if (S_OK == URLDownloadToFile(NULL, SourceURL.c_str(),
                                DestinationFile.c_str(), 0, NULL)) {
    printf("The file is successfully downloaded.");

    return 0;

  }

  else {
    printf("Download Failed");
    return -1;
  }
}

Vor dem Kompilieren des obigen Codes sollte hier erwähnt werden, dass der obige Code nur mit dem NSVC-Compiler funktioniert, der Visual Studio Express, Visual C++ oder einen anderen verwandten verwendet. Es funktioniert nicht mit dem MinGW-Compiler, da er die URLDownloadToFile-API nicht enthält.

Sobald wir den obigen Code ausgeführt haben, wird die Datei über den Link heruntergeladen.

Siehe die Ausgabe:

The file is successfully downloaded.

C++-Download-Datei

C++-Download als Byte-String

Diese Methode verwendet die win32-API URLOpenBlockingStream, um die Datei als eine Zeichenfolge von Bytes herunterzuladen, die auch in einer Datei gespeichert werden kann. Dies ist ein kniffliger Schritt-für-Schritt-Prozess; folgen Sie den unteren Schritten.

  1. Verwenden Sie zuerst den URLOpenBlockingStream, um eine IStream-Schnittstelle zur URL zu erhalten.
  2. Fügen Sie dann die URL ein, unter der sowohl das HTTP- als auch das HTTPS-Protokoll funktionieren.
  3. Sobald der IStream verfügbar ist, verwenden Sie die Funktion Lesen, um die Bytes herunterzuladen. Möglicherweise müssen wir hier eine Schleife verwenden.
  4. Sobald die Bytes in einer Zeichenfolge gesammelt wurden, können wir sie entweder in einer Datei speichern oder die Zeichenfolge herunterladen.

Lassen Sie uns ein Beispiel basierend auf den obigen Schritten ausprobieren und versuchen, die Google-Startseite in Byte abzurufen.

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

#include <cstdio>
#include <iostream>
#include <string>
#define getURL URLOpenBlockingStreamA

using namespace std;

int main() {
  IStream* DemoStream;
  const char* SourceURL = "http://google.com";

  if (getURL(0, SourceURL, &DemoStream, 0, 0)) {
    cout << "An Error has occured.";
    cout << "Please Check the internet";
    cout << "Please Check the source URL.";
    return -1;
  }

  // this char array will be filled with bytes from the URL
  char DemoBuff[100];
  // keep appending the bytes to this string
  string DemoStr;
  unsigned long Bytes_Read;

  while (true) {
    DemoStream->Read(DemoBuff, 100, &Bytes_Read);
    if (0U == Bytes_Read) {
      break;
    }
    // appending and collecting to the string
    DemoStr.append(DemoBuff, Bytes_Read);
  };

  DemoStream->Release();
  cout << DemoStr << endl;
  return 0;
}

Der obige Code ruft die Google-Homepage in einer Bytefolge ab; Obwohl es nicht effizient ist, etwas in einer Bytefolge herunterzuladen, können wir die Bytes auch in einer Datei speichern und später verwenden. Die Ausgabe für den obigen Code ist eine lange Zeichenfolge von Bytes.

Stellen Sie sicher, dass Sie den obigen Code mit demselben Compiler wie den ersten Code ausführen, da der URLOpenBlockingStream auch nicht mit dem C++-Compiler MinGW funktioniert.

Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook