Datei überschreiben? (URLDownloadToFile)



  • Hallo zusammen 🙂

    Ich habe diesen Code:

    URLDownloadToFile(NULL,TEXT("http://meineseite.de/test.txt"),"C:\\test.txt",1,NULL);
    

    Um die Datei zu überschreiben die gedownloadet wurde, muss ich das Programm beenden und neu starten. Wenn ich es in einer While schleife laufen lasse, downloadet er auch nur einmal....

    Kann mir da jemand einen guten Rat geben?

    Grüsse,
    Genius



  • Datei vorher löschen? Oder einen Parameter der angibt, dass die Datei überschrieben werden kann?



  • Hallo

    Ja ich kenne den Parameter nicht.

    -> Löschen nach dem Download hilft leider auch nicht.

    Gruss,
    Genius



  • wieso setzt du den vorletzten Parameter auf 1?

    msdn schrieb:

    HRESULT URLDownloadToFile(
    LPUNKNOWN pCaller,
    LPCTSTR szURL,
    LPCTSTR szFileName,
    DWORD dwReserved,
    LPBINDSTATUSCALLBACK lpfnCB
    );

    [...]

    dwReserved
    Reserved. Must be set to 0.

    http://msdn.microsoft.com/en-us/library/ms775123(v=vs.85).aspx

    also bei mir geht z.B. folgender Code einwandfrei:

    URLDownloadToFile(NULL,TEXT("http://www.google.de"), TEXT("C:\\test\\test.txt"), 0, NULL);
    	URLDownloadToFile(NULL,TEXT("http://www.youtube.com"), TEXT("C:\\test\\test.txt"), 0, NULL);
    

    die Zieldatei wird auch überschrieben 😉

    außerdem sind Parameter 2 und 3 vom selben Typ. Warum nimmst du also einmal
    TEXT() und das 2. Mal nicht?

    lg,
    andi01.



  • Hallo andi01

    Vielen Dank für deine Mühe, mir das zu erklären :-).
    Ich habe eine Funktion die ein "Timer" sein soll. Diese sieht so aus:

    void Wait(int seconds)
    {
      clock_t endwait;
      endwait = clock () + seconds * CLK_TCK ;
      while (clock() < endwait) {}
    }
    

    Dannach lasse ich eine Endlosschleife laufen mit dem Timer, das sieht so aus:

    while(1<2)
    {
      Wait(5); //Sekunden
    
      //Hier der Download
    }
    

    Es überschreibt mir die Datei nur, wenn ich das Programm neu starte. Also beenden und neu starten. In der Schleife irgendwie nicht 😞

    Grüsse,
    Genius



  • also mit der Funktion URLDownloadToFile geht das Überschreiben schon während der Laufzeit (zumindest bei mir, Visual Studio 2010 Express, Win7 Professionell 32 bit).

    Wieso nimmst du eigentlich nicht Sleep() statt einer eigenen Wait-Funktion? das kostet nur unnötig Rechenzeit im Prozessor...

    außerdem wieso while(1<2) ? eine Endlosschleife geht mit while(true) oder for( ;; ) viel einfacher...

    hier mal ein sehr einfaches, getestete Beispiel, das funktioniert:

    int main()
    {
    	for(;;)
    	{
    		Sleep(5000);
    		URLDownloadToFile(NULL,TEXT("http://www.google.de"), TEXT("C:\\test\\test.txt"), 0, NULL);
    		Sleep(5000);
    		URLDownloadToFile(NULL,TEXT("http://www.youtube.com"), TEXT("C:\\test\\test.txt"), 0, NULL);
    	}
    	getch();
    }
    

    die Datei wird zur Laufzeit alle 5sec überschrieben, was man auch daran sieht dass sich die größe alle 5sec von 16kb auf 70kb u.U. ändert 😉

    teste doch mal ob das bei dir auch passiert (müsste es aber eigentlich...)

    einfach mal ins Blaue geraten liegt das daran dass du die Änderungen in der Downloadfunktion nicht übernommen hast aus dem Post von oben...

    wenn es dann immernoch nicht geht wäre es schön wenn du mal einen größeren Codeausschnitt posten würdest, denn in dem bisherigen Ausschnitt ist kein Fehler, der funktioniert bei mir einwandfrei.

    lg,
    andi01.



  • DeleteUrlCacheEntry(TEXT("http://xxx")); // Wininet.h
    URLDownloadToFile(NULL,TEXT("http://xxx"),
    

    MFG



  • Jenau!


Anmelden zum Antworten